計算機中的進制和編碼

計算機中的進制和編碼

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

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

扯遠了,咱們說有城池A和城池B,城池B爲前線,當城池B受到攻擊的時候,須要城池A派來援兵。這個時候城池B點着了防火臺,若是隻有一個烽火臺,那麼只有點着火和沒點火兩種狀態。沒法準確表示攻擊城池B的軍隊數量,這個時候,有人想到了一種表示方法。編程

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

     0    1post

那兩座烽火臺呢?性能

 

      00     01優化

      10    11編碼

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

當兩座烽火臺都被點着的時候,就表示來了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進制,而不其它的?二、八、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

二、對硬件來講,64位和32位指數據寬度,64位一次取8字節y也就是64bit,32取4字節也就是32bit,因此理論上64位比32位性能提升了一倍。

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

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

 

 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包含的字。

相關文章
相關標籤/搜索