編程過程中,我們大部分時間是與CPU和內存打交道,很少直接操作硬盤,下面我們來看看數據是怎樣保存在內存中的。
內存條是一個非常精密的部件,包含了上億個電子元器件,它們很小,達到了納米級別。這些元器件,有兩種狀態,通電和斷電,通電是高電平(5V),用1來表示,斷電是低電平(0V),用0來表示。所以,一個元器件有2種狀態。
如果我們通過電路來控制這些元器件的通斷電,那麼就可以得到很多0、1狀態的組合。例如,8個元器件有 28=256 種不同的組合,16個元器件有 216=65536 種不同的狀態。雖然一個元器件只能表示2種狀態,但是多個組合起來就可以表示很多狀態了,所以,我們通常將8個、16個、24或32個元器件組合起來表示一個字符,8個元器件可以表示256個字符,16個可以表示65536個字符。
我們將1個元器件稱為1Bit(比特),8個元器件稱為1Byte(字節),那麼16個元器件就是2Byte,32個就是4Byte,以此類推,8×1024個元器件就是1024Byte,簡寫為1KB,8×1024×1024個元器件就是1024KB,簡寫為1MB,8×1024×1024×1024個元器件就是1024MB,簡寫為1GB。現在,你知道1GB的內存有多少個元器件了吧。
單位換算:
1Byte = 8 Bit
1KB = 1024Byte
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
你看,在內存中沒有abc這樣的字符,只有0和1兩個數字,計算機也只認識0和1。所以,計算機使用二進制,而不是我們熟悉的十進制,寫入內存中的數據,都會被轉換成0和1的組合。
二進制思想
十進制有0~9共10個數字,基數為10,逢十進一,借一當十;二進制只有0和1兩個數字,基數為2,逢二進一,借一當二。例如:
十進制 4321 = 4×103 + 3×102 + 2×101 + 1×100
二進制 1101 = 1×23 + 1×22 + 0×21 + 1×20 = 8 + 4 + 0 + 1 = 13
二進制 110.11 = 1×22 + 1×21 + 0×20 + 1×2-1 + 1×2-2 = 4 + 2 + 0 + 0.5 + 0.25 = 6.75
二進制數據的算術運算的基本規律和十進制數的運算十分相似。最常用的是加法運算和乘法運算。
二進制加法:
0+0=0
0+1=1
1+0=1
1+1=10
二進制乘法:
0×0=0
1×0=0
0×1=0
1×1=1
二進制減法:
0-0=0
1-0=1
1-1=0
10-1=1
二進制除法:
0÷1=0
1÷1=1
八進制和十六進制
除了二進制,編程中也經常使用八進制和十六進制。
八進制有0~7共8個數字,基數為8,逢八進一,借一當八;十六進制中,用A來表示10,B表示11,C表示12,D表示13,E表示14,F表示15,因此有0~F共16個數字,基數為16,逢16進1,借1當16。例如:
八進制 3072 = 3×83 + 0×82 + 7×81 + 2×80 = 1536 + 0 + 56 + 2 = 1594
十六進制 E3F9 = 14×163 + 3×162 + 15×161 + 9×160 = 57344 + 768 + 240 + 9 = 58361
為了加深印象,最後給大家看個笑話。
程序員A:“哥們兒,最近手頭緊,借點錢?”
程序員B:“成啊,要多少?”
程序員A:“一千行不?”
程序員B:“咱倆誰跟誰!給你湊個整,1024,拿去吧。”
你看懂這個笑話了嗎?請選出正確答案。
A) 因為他同情程序員A,多給他24塊
B) 這個程序員不會數數,可能是太窮餓暈了
C) 這個程序員故意的,因為他獨裁的老婆規定1024是整數
D) 就像100是10的整數次方一樣,1024是2的整數次方,對於程序員就是整數