读书笔记 -《深入理解计算机系统》2.1
1、進(jìn)制
????? 計(jì)算機(jī)作為一種電子計(jì)算工具,是由大量的電子器件組成的,在這些電子器件中,電路的通和斷、電位的高和低,用兩個(gè)數(shù)字符號(hào)“1”和“0”分別表示容易實(shí)現(xiàn)。同時(shí)二進(jìn)制的運(yùn)算法則也很簡(jiǎn)單,因此,在計(jì)算機(jī)內(nèi)部通常用二進(jìn)制代碼來(lái)作為內(nèi)部存儲(chǔ)、傳輸和處理數(shù)據(jù)。
????? 但是用二進(jìn)制數(shù)表示一個(gè)數(shù)值時(shí),位數(shù)比較長(zhǎng),不便書(shū)寫(xiě)和記憶,而用于十進(jìn)制雖然看起來(lái)很方便但是與位模式之間的轉(zhuǎn)換卻十分的麻煩。因此,使用十六進(jìn)制來(lái)書(shū)寫(xiě)位模式。
????? 下圖為二進(jìn)制、十進(jìn)制、十六進(jìn)制的轉(zhuǎn)換表:
??????
2、單位
字節(jié)(byte):用于計(jì)量存儲(chǔ)容量和傳輸容量的最小的可存儲(chǔ)器單位,1個(gè)字節(jié)等于8位二進(jìn)制。
?
單位的換算:
????? 1字節(jié)(Byte)= 8位(bit)
????? 1024字節(jié) = 1KB(2^10字節(jié))
????? 1024KB = 1MB(2^20字節(jié))
????? 1024MB = 1GB(2^30字節(jié))
????? 1GB = 1TB(2^40字節(jié))
3、字長(zhǎng)
????? 在同一時(shí)間中處理二進(jìn)制數(shù)的位數(shù)叫字長(zhǎng)。通常稱(chēng)處理字長(zhǎng)為8位數(shù)據(jù)的CPU叫8位CPU,32位CPU就是在同一時(shí)間內(nèi)處理字長(zhǎng)為32位的二進(jìn)制數(shù)據(jù)。二進(jìn)制的每一個(gè)0或1是組成二進(jìn)制的最小單位,稱(chēng)為一個(gè)比特(bit).
字長(zhǎng):一般說(shuō)來(lái),計(jì)算機(jī)在同一時(shí)間內(nèi)處理的一組二進(jìn)制數(shù)稱(chēng)為一個(gè)計(jì)算機(jī)的“字”,而這組二進(jìn)制數(shù)的位數(shù)就是“字長(zhǎng)”。在其他指標(biāo)相同時(shí),字長(zhǎng)越大計(jì)算機(jī)的處理數(shù)據(jù)的速度就越快。早期的微機(jī)字長(zhǎng)一般是8位和16位,386以及更高的處理器大多是32位。目前市面上的計(jì)算機(jī)的處理器大部分已達(dá)到64位。更多信息查看
? 4、字節(jié)順序
由來(lái):
????? 我們?cè)趯?xiě)字符流時(shí),因?yàn)樽址椭徽家粋€(gè)字節(jié)數(shù),計(jì)算機(jī)只須按一個(gè)字符一個(gè)字符寫(xiě)入文件即可。但是如果是處理整型時(shí),由于整型占4個(gè)字節(jié),所以一個(gè)整型內(nèi)部的字節(jié)存儲(chǔ)排列的順序直接關(guān)系到被計(jì)算機(jī)識(shí)別出來(lái)的整型值。某種意義上也可直接理解計(jì)算機(jī)的識(shí)別順序就是所謂的字節(jié)順序。
????? 字節(jié)序主要分為:大端法(通常為網(wǎng)絡(luò)字節(jié)序)、小端法(通常為主機(jī)字節(jié)順序)
?
????? 1、小端法(Little-Endian)就是低位字節(jié)排放在內(nèi)存的低地址端即該值的起始地址,高位字節(jié)排放在內(nèi)存的高地址端。
????? 2、大端法(Big-Endian)就是高位字節(jié)排放在內(nèi)存的低地址端即該值的起始地址,低位字節(jié)排放在內(nèi)存的高地址端。
舉個(gè)簡(jiǎn)單的例子,對(duì)于整形0x12345678。它在大端法和小端法的系統(tǒng)內(nèi)中,分別如圖1所示的方式存放。
?5、原碼,反碼,補(bǔ)碼
????? 數(shù)值有正負(fù)之分,計(jì)算機(jī)就用一個(gè)數(shù)的最高位存放符號(hào)(0為正,1為負(fù)).這就是機(jī)器數(shù)的原碼了.假設(shè)機(jī)器能處理的位數(shù)為8.即字長(zhǎng)為1byte,原碼能表示數(shù)值的范圍為(-127~-0 +0~127)共256個(gè).(注:-0將由下面解釋)?
????? 有了數(shù)值的表示方法就可以對(duì)數(shù)進(jìn)行算術(shù)運(yùn)算.但是很快就發(fā)現(xiàn)用帶符號(hào)位的原碼進(jìn)行乘除運(yùn)算時(shí)結(jié)果正確,而在加減運(yùn)算的時(shí)候就出現(xiàn)了問(wèn)題,如下: 假設(shè)字長(zhǎng)為8bits
????? (1) 10 - (1)10 = (1)10 + (-1)10 = (0)10
????? (0 0000001)原 + (1 0000001)原 = (1 0000010)原 = ( -2 ) 顯然不正確。
????? 因?yàn)樵趦蓚€(gè)整數(shù)的加法運(yùn)算中是沒(méi)有問(wèn)題的,于是就發(fā)現(xiàn)問(wèn)題出現(xiàn)在帶符號(hào)位的負(fù)數(shù)身上。對(duì)除符號(hào)位外的其余各位逐位取反就產(chǎn)生了反碼。反碼的取值空間和原碼相同且一一對(duì)應(yīng)。下面是反碼的減法運(yùn)算:
????? (1)10 - (1)10 = (1)10 + (-1)10 = (0)10
????? (0 0000001)反 + (1 1111110)反 = (1 1111111)反 = ( -0 ) 有問(wèn)題。
????? (1)10 - (2)10 = (1)10 + (-2)10 = (-1)10
????? (0 0000001)反 + (1 1111101)反 = (11111110)反 = (-1) 正確。
????? 問(wèn)題出現(xiàn)在(+0)和(-0)上,在人們的計(jì)算概念中零是沒(méi)有正負(fù)之分的。(印度人首先將零作為標(biāo)記并放入運(yùn)算之中,包含有零號(hào)的印度數(shù)學(xué)和十進(jìn)制計(jì)數(shù)對(duì)人類(lèi)文明的貢獻(xiàn)極大)。
????? 于是就引入了補(bǔ)碼概念。負(fù)數(shù)的補(bǔ)碼就是對(duì)反碼加一,而正數(shù)的補(bǔ)碼不變,正數(shù)的原碼反碼補(bǔ)碼是一樣的。在補(bǔ)碼中用(-128)代替了(-0),這個(gè)是人為規(guī)定的,所以補(bǔ)碼的表示范圍為:
????? (-128~0~127)共256個(gè)。
????? 注意:(-128)沒(méi)有相對(duì)應(yīng)的原碼和反碼, (-128) = (1 0000000)? 補(bǔ)碼的加減運(yùn)算如下:
????? (1)10 - (1)10 = (1)10 + (-1)10 = (0)10
????? (0 0000001)補(bǔ) + (1 1111111)補(bǔ) = (0 0000000)補(bǔ) = ( 0 ) 正確。
????? (1)10 - (2)10 = (1)10 + (-2)10 = (-1)10
????? (00000001)補(bǔ) + (11111110)補(bǔ) = (11111111)補(bǔ) = (-1) 正確。
????? 所以補(bǔ)碼的設(shè)計(jì)目的是:
???? (1)使符號(hào)位能與有效值部分一起參加運(yùn)算,從而簡(jiǎn)化運(yùn)算規(guī)則。補(bǔ)碼機(jī)器數(shù)中的符號(hào)位,并不是強(qiáng)加上去的,是數(shù)據(jù)本身的自然組成部分,可以正常地參與運(yùn)算。
???? (2) 使減法運(yùn)算轉(zhuǎn)換為加法運(yùn)算,進(jìn)一步簡(jiǎn)化計(jì)算機(jī)中運(yùn)算器的線(xiàn)路設(shè)計(jì)。
所有這些轉(zhuǎn)換都是在計(jì)算機(jī)的最底層進(jìn)行的,而在我們使用的匯編、c等其他高級(jí)語(yǔ)言中使用的都是原碼。
轉(zhuǎn)載于:https://www.cnblogs.com/BoyceLin/archive/2010/06/08/1754060.html
總結(jié)
以上是生活随笔為你收集整理的读书笔记 -《深入理解计算机系统》2.1的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [翻译]load-on-startup
- 下一篇: 这几天的在寝心的