1. 程式人生 > >計算機中的進制和編碼(轉載)

計算機中的進制和編碼(轉載)

理論 數量 8進制 技術 單位 中國 64bit cnblogs 屬於

原文出處: http://www.cnblogs.com/resn/p/5775378.html

古時候,人們是如何來傳遞消息的?

當年周幽王為博褒妃一笑,不顧眾臣反對,竟數次無故點燃邊關告急用的烽火臺,使各路諸侯,長途跋涉,匆忙趕去救駕。結果,被戲而回。周幽王從此便失信於諸侯,最後,當邊關真的告急之時,他點燃烽火卻再也沒人趕來救他了!不久,便死於刀下,亡了西周。西周第九代國君是周厲王,貪財好色,昏庸殘暴,激起了公元前841年的“國人(平民)暴動”。周朝從此衰落下去,社會動蕩不安。

扯遠了,我們說有城池A和城池B,城池B為前線,當城池B受到攻擊的時候,需要城池A派來援兵。這個時候城池B點著了防火臺,如果只有一個烽火臺,那麽只有點著火和沒點火兩種狀態。無法準確表示攻擊城池B的軍隊數量,這個時候,有人想到了一種表示方法。

我每一座烽火臺都可以表示兩種狀態,點火和未點火,分別用0和1來表示。

技術分享圖片

0 1

那兩座烽火臺呢?

技術分享圖片技術分享圖片

00 01

10 11

沒有烽火臺被點著火的時候,表示沒有敵人,只點著第一座烽火臺的時候,表示來了一個敵人,只點著第二座烽火臺的時候,表示來了2個敵人。

當兩座烽火臺都被點著的時候,就表示來了3個人。表示數字 0-3。

如果有三座烽火臺呢?

技術分享圖片技術分享圖片技術分享圖片

000 001 010 011

100 101 110 111

三座烽火臺的時候表示了8中狀態。 表述數字0 -7

如果有四座烽火臺呢

技術分享圖片技術分享圖片技術分享圖片技術分享圖片

0000 0001 0010 0011 0100 0101 0110 0111

1000 1001 1010 1011 1100 1101 1110 1111

以此類推:

當有8座烽火臺的時候,最大可以表示多少?

技術分享圖片技術分享圖片技術分享圖片技術分享圖片技術分享圖片技術分享圖片技術分享圖片技術分享圖片

0 1 2 3 4 5 6 7

  1 2 4 8 16 32 64 128

如果敵人來了130個人,如何表示呢?

150人又如何表示?

咱們平時用的進制是10進制。在計算機中,還有另外兩種進制八進制和十六進制

十進制: 逢十進一

  表示數字: 0123456789

二進制:逢二進一

  表示數字: 0 1

八進制: 逢八進一

  01234567

  作用: 在某些編程語言裏提供了使用八進制符號來表示數字的能力,而且還是有一些比較古老的Unix應用在使用八進制。

  和二進制之間的轉換:

    2-->8 : 取三合一 8-->2 : 取一分三

十六進制: 逢十六進一

  表示數字: 01234567ABCDEF

二進制使用起來很不方便, 16進制或8進制可以解決這個問題。因為,進制越大,數的表達長度也就越短。不過,為什麽偏偏是16或8進制,而不其它的?2、8、16,分別是2的1次方、3次方、4次方。這一點使得三種進制之間可以非常直接地互相轉換。8進制或16進制縮短了二進制數,但保持了二進制數的表達特點。




計算機中的單位:

位 bit (比特)(Binary Digits):存放一位二進制數,即 0 或 1,最小的存儲單位。
字節 byte:8個二進制位為一個字節(B),最常用的單位。
1B(bytes) = 8bit
1KB (Kilobyte 千字節)=1024B,
1MB (Megabyte 兆字節 簡稱“兆”)=1024KB,
1GB (Gigabyte 吉字節 又稱“千兆”)=1024MB,
1TB(Trillionbyte 萬億字節 太字節)=1024GB,
1PB(Petabyte 千萬億字節 拍字節)=1024TB,
1EB(Exabyte 百億億字節 艾字節)=1024PB,
1ZB (Zettabyte 十萬億億字節 澤字節)= 1024 EB,
1YB (Yottabyte 一億億億字節 堯字節)= 1024 ZB,
1BB (Brontobyte 一千億億億字節)= 1024 YB

硬盤空間少比買的時候要少?

是因為 換算時他們將 1024 按照 1000來算
256G的硬盤: 256G= ? Bytes:按1000來算

256G 硬盤
1K = 1000B
1M = 1000K
1G = 1000M = 1000*1000*1000B =1000000000B
256G = 256000000000B

256000000000/1024/1024/1024 B = 238.4185791015625 G
500GB*1000*1000*1000/1024/1024/1024=465.66

百兆寬帶,下載速度只能達到十多兆。

寬帶運營商按照二進制來計算,所以要100M的寬帶要除8才是下載的速度。




32位和64位 /31bit和64bit的區別

1. 對操作系統來說,64位和32位指最大內存尋址空間,32位最大4GB(2^32),64位理論上16EB(2^64),但現在一般都是2^48

2、對硬件來說,64位和32位指數據寬度,64位一次取8字節y也就是64bit,32取4字節也就是32bit,所以理論上64位比32位性能提高了一倍。

  實際上的情況是,達不到,內存變大了,需要尋址更多。

3、對應用程序來說,應用程序基於操作系統 和硬件,其使用的指令寬度隨系統和硬件變化。

32位和64位區別的最常見表現就是64萬位操作系統可以支持4G以上的內存。缺點也是內存占用,64位代碼比32位代碼多占用空間,

現在來看64位操作系統兼容32位軟件。反之則不行。

32位和64位最本質的區別是CPU來決定的,操作系統的位數是是看最大能把CPU的性能發揮到多高。我們現在在市面上見到的CPU都是64位的,32位的CPU已經是老古董了。




二進制的編碼

計算機內部是由集成電路這種電子部件構成的,電路只可以表示兩種狀態——通電、斷電

因為這個特性,計算機內部只能處理二進制。那為什麽我們能在計算機上看到字母和特殊字符呢?

如果我們用一個二進制數字表示一個字符,比如說用“0100 0001”來表示A。

根據這個對應關系,我們制作一個表格,這個表格裏一個二進制數字對應一個字符。

技術分享圖片

技術分享圖片

這就是編碼。

這套編碼叫ASCII(美國(國家)信息交換標準(代)碼),使用7個或8個二進制位進行編碼的方案,最多可以給256個字符。使用了ASCII碼,不同的計算機之間就可以實現數據的標準化。
但是ASCII使用的時候有一些限制。他最多之可以表示256個字符。如果有其他的字符就無能為力了。ASCII只能表示26個基本的拉丁字母、阿拉伯數字和英式標點。因此也只能用於顯示現代美國英語。
後來計算機世界開始有了其他語言,ASCII碼已經無法滿足需求。後來不同語言的人各自為自己定制了一套屬於自己的編碼,同時與ASCII保持兼容。這些編碼統稱MBCS,到了這裏大家都開始好似用雙字節。(中國的叫GB*,比如GBK).
在後來有人開始覺得,這麽多編碼,有些編碼之間還不兼容,太讓人頭大了,於是有這麽一群人就坐在一起想出了一個辦法:所有的語言都使用同一種編碼,這種編碼就是Unicode。 Unicode使用最少2個字節(1個字節=1BYTE=8bit=一個長度為8的二進制數) 來表示字母和符號等,有時候是4個字節。這樣就解決了上面遇到的問題。
Unicode又叫萬國碼,是業界的一種標準。但是有人又覺得如果我要表示一個ASCII裏的字符,使用unicode來表示不是太浪費空間了嗎,於是就有人想出了另外一種解決方案——UTF-8。
UTF-8是對Unicode編碼的壓縮和優化,最大的特點是它采用了變長的編碼方式,他不再是最少使用2個字節,而是將所有的字符進行分類。ascii碼中的內容用1個字節保存、歐洲的字符用2個字節保存,東亞的字符用3個字節保存…

技術分享圖片

GB2312是1980年國家制定的漢字內碼規範,收錄了6千多漢字及符號,表示的符號有限 ;國家標準化委員會又制定了GB13000,GB13000制定的原則與GB2312不同,GB13000以國際化為目標, 該標準編碼參照了Unicode 2.0 標準編碼,與GB2312完全不兼容,因早期的計算機中的漢卡采用了GB2312,無法順利向GB13000過渡,所以GB13000變成了一個紙面上的 標準,無法推廣-;有了這個經驗之後,國家標準化委員會制定了GBK標準,他兼容GB2312標準,同時在GB2312標準的基礎上擴展了GB13000包含的字。

計算機中的進制和編碼(轉載)