古時候,人們是如何來傳遞消息的?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包含的字。