以下內(nèi)容參考自data whale 組隊(duì)學(xué)習(xí)
信息的存儲(chǔ)
序?qū)?nèi)存視為一個(gè)非常大的數(shù)組:由字節(jié)(1字節(jié)=8比特)組成军掂。每個(gè)字節(jié)用一個(gè)唯一數(shù)字表示杂腰,就稱為地址。
地址的集合:虛擬地址空間扔水。
字長:決定虛擬地址空間的最大可以到多少(2^w-1)(我們常聽的64/32位機(jī)器)
64位機(jī)器向32位機(jī)器兼容:改變編譯選項(xiàng):gcc -m32 -o hello32 hello.c饱狂。這個(gè)程序可以運(yùn)行在64與32位的機(jī)器上曹步。
對(duì)于數(shù)字存儲(chǔ),有大端法(高位在前休讳,與手寫習(xí)慣一致)讲婚,小端法(低位在前)之別(不同系統(tǒng)的機(jī)器可能不一樣)。而文本由ascii碼表示衍腥,具有更強(qiáng)的平臺(tái)獨(dú)立性磺樱。
有符號(hào)位的二進(jìn)制表示
三種表示方法:
* 原碼:正數(shù)的符號(hào)位用“0”表示纳猫,負(fù)數(shù)的符號(hào)位用“1”表示婆咸,其余數(shù)位表示數(shù)值本身(優(yōu)點(diǎn):簡單、人易懂芜辕。缺點(diǎn):加減法麻煩)尚骄;
* 反碼:正數(shù)的反碼與其原碼相同;?負(fù)數(shù)的反碼是在原碼的基礎(chǔ)上保持符號(hào)位不變,其余
各位按位求反得到的侵续。
* 補(bǔ)碼:正數(shù)的補(bǔ)碼與其原碼相同;?負(fù)數(shù)的補(bǔ)碼是在原碼的基礎(chǔ)上保持符號(hào)位不變倔丈,其它的數(shù)位?1?變?yōu)?0,0?變?yōu)?1状蜗,最后再加?1?運(yùn)算需五。也就是說,負(fù)數(shù)的補(bǔ)碼是它的反碼加?1(通常使用)轧坎。
注意:任意數(shù)的補(bǔ)碼的補(bǔ)碼是原碼宏邮。
補(bǔ)碼的理解:負(fù)數(shù)+絕對(duì)值相等的正數(shù)歸0.由于最高位的存在(負(fù)數(shù)為1,加不成0),歸0使用溢出的方法實(shí)現(xiàn)蜜氨,也就是說械筛,負(fù)數(shù)+絕對(duì)值相等的正數(shù)=11111111.由此可以認(rèn)為認(rèn)為負(fù)數(shù)的補(bǔ)碼是反碼+1.實(shí)現(xiàn)歸0.
有符號(hào)數(shù)和無符號(hào)數(shù)的轉(zhuǎn)換
* 有符號(hào)轉(zhuǎn)無符號(hào):得到的無符號(hào)數(shù)等于該有符號(hào)數(shù)加上?2^w(負(fù)數(shù)成大數(shù));
*?無符號(hào)轉(zhuǎn)有符號(hào):當(dāng)最高位等于?0?時(shí),無符號(hào)數(shù)可以表示的數(shù)值小于有符號(hào)數(shù)的最大值飒炎,此時(shí)轉(zhuǎn)換后的數(shù)值不變埋哟。當(dāng)最高位等于?1時(shí),無符號(hào)數(shù)可以表示的數(shù)值大于有符號(hào)數(shù)的最大值郎汪,在這種情況下赤赊,轉(zhuǎn)換后得到有符號(hào)數(shù)等于該無符號(hào)數(shù)減去?2^w(負(fù)數(shù))
擴(kuò)展與截?cái)?/h4>
擴(kuò)展:當(dāng)有符號(hào)數(shù)從一個(gè)較小的數(shù)據(jù)類型轉(zhuǎn)換成較大類型時(shí),進(jìn)行符號(hào)位擴(kuò)展煞赢,可以保持?jǐn)?shù)值不變砍鸠。
需要注意的是:正數(shù)補(bǔ)0,負(fù)數(shù)補(bǔ)1.
截?cái)啵罕A舻臀?/p>
整數(shù)運(yùn)算
加法:
1. 無符號(hào)相加注意溢出,高位截?cái)啾A舻臀弧?/p>
2. 有符號(hào)相加:當(dāng)?x?加?y?的和大于等于?2^w?1?時(shí)耕驰,發(fā)生正溢出爷辱,此時(shí),得到的結(jié)果會(huì)減去?2^w.?當(dāng)?x?加?y?的和小于??2^w?1?時(shí)朦肘,發(fā)生負(fù)溢出饭弓,此時(shí),得到的結(jié)果會(huì)加上?2^w
乘法:
1. 無符號(hào)相乘注意溢出,高位截?cái)啾A舻臀弧?/p>
2. 有符號(hào)相乘:計(jì)算機(jī)的有符號(hào)數(shù)用補(bǔ)碼表示媒抠,因此補(bǔ)碼乘法就是有符號(hào)數(shù)乘法弟断。無論是無符號(hào)數(shù) 乘法,還是補(bǔ)碼乘法趴生,運(yùn)算結(jié)果的位級(jí)表示都是一樣的阀趴,只不過補(bǔ)碼乘法比無符號(hào) 數(shù)乘法多一步,需要將無符號(hào)數(shù)轉(zhuǎn)換成補(bǔ)碼(有符號(hào)數(shù))苍匆。雖然完整的乘積結(jié)果的位 級(jí)表示可能會(huì)不同刘急,但是截?cái)嗪蟮奈患?jí)表示都是相同的。
case:負(fù)數(shù)補(bǔ)碼浸踩,符號(hào)位不變叔汁,左移補(bǔ)0,右移補(bǔ)1.
浮點(diǎn)數(shù)計(jì)算
表示:符號(hào)位检碗,階數(shù)位据块,尾數(shù)位/底數(shù)位(科學(xué)計(jì)數(shù)法相關(guān))。
* 單精度(共32位表示):其中最高位?31?位表示符號(hào)位?s折剃。從第?23?位到?30?位另假,這?8?個(gè)二進(jìn)制位表示階數(shù)。剩余的?23?位表示尾數(shù)?M 怕犁。
* 雙精度(共64位表示):其中最高位 63 位表示符號(hào)位?s边篮。中間11位表示階數(shù)开睡。剩余的 52 位表示尾數(shù)?M 。
+/- inf 位階無窮
舍入方式:向偶舍入苟耻、向零舍入篇恒、向下 舍入、向上舍入凶杖。
由于表示問題胁艰,帶來京都問題,從而使得加法智蝠、乘法結(jié)合性腾么、分配性不滿足。