c語言有符號(hào)int取值范圍

結(jié)論,取值范圍是-2^31~2^31-1(十六進(jìn)制為0x80000000~0x7fffffff)。因?yàn)?既不是正數(shù)也不是負(fù)數(shù),+0是0,-0是最小的負(fù)數(shù)(-最大正數(shù)-1),所以負(fù)數(shù)的取值范圍比正數(shù)多一個(gè)數(shù)。

int為四個(gè)字節(jié),一共32位,其中最高位為符號(hào)位,0表示正數(shù),1表示負(fù)數(shù),剩下的31位表示數(shù)。所以一共可表示2*2^31即2^32個(gè)數(shù)字(包括一個(gè)0)。

在計(jì)算機(jī)中保存有符號(hào)數(shù),保存的是數(shù)的二進(jìn)制的補(bǔ)碼,正數(shù)的源碼、反碼、補(bǔ)碼相同,負(fù)數(shù)的反碼為源碼除符號(hào)位之外其余位取反,補(bǔ)碼為反碼+1(符號(hào)位不參與這個(gè)運(yùn)算)。

在計(jì)算機(jī)中,正數(shù)為常量,且源碼和補(bǔ)碼相同,所以存儲(chǔ)正數(shù)直接存就行。而負(fù)數(shù)因?yàn)橛幸粋€(gè)負(fù)號(hào)-,所以負(fù)數(shù)是一個(gè)計(jì)算表達(dá)式,都是由負(fù)數(shù)的絕對(duì)值計(jì)算出該負(fù)數(shù)的補(bǔ)碼后存儲(chǔ)在計(jì)算機(jī)中的。

求負(fù)數(shù)的補(bǔ)碼值的時(shí)候,如-5,首先確定其符號(hào)位是1,后面寫出其絕對(duì)值的二進(jìn)制形式,28個(gè)0后面跟101,反碼為29個(gè)1后面跟010,再加1就是補(bǔ)碼29個(gè)1后面跟011,那么-5在計(jì)算機(jī)中就是存為29個(gè)1后面跟011。

所以可知0是32個(gè)0,最大正整數(shù)為0后面31個(gè)1,即2^31-1(2^31個(gè)數(shù)里包含了0,所以正數(shù)的個(gè)數(shù)要減去一個(gè))。按理說正負(fù)數(shù)應(yīng)該是對(duì)稱的,最小的負(fù)數(shù)應(yīng)該是-最大正整數(shù),即-(2^31-1),為什么實(shí)際上最小的負(fù)數(shù)為? -最大正整數(shù)-1?為什么-0是最小的負(fù)數(shù)?

注意,雖然? -最大正整數(shù)-1? 就是 -(2^31-1)-1 = -2^31,但是寫的時(shí)候不能寫 int i = -2^31;因?yàn)檎f了負(fù)數(shù)其實(shí)是一個(gè)計(jì)算表達(dá)式,實(shí)際上是先對(duì)正數(shù)取反然后加1,符號(hào)位置為1,但是正數(shù)最大值是2^31-1,所以寫-2^31是溢出的,這涉及到另外一個(gè)知識(shí)點(diǎn)。

先解釋為什么-0是最小的負(fù)數(shù)(負(fù)的最大正整數(shù)-1)。

負(fù)的最大正整數(shù)的源碼:32個(gè)1。反碼:1后面跟31個(gè)0。補(bǔ)碼:左右各1個(gè)1,中間30個(gè)0。所以,負(fù)的最大正整數(shù)(-(2^31-1))在計(jì)算機(jī)中存儲(chǔ)為:1三十個(gè)零1。負(fù)的最大正整數(shù)-1就是負(fù)的最大正整數(shù)加-1。-1的補(bǔ)碼為:32個(gè)1(十六進(jìn)制為0xffffffff),那么兩個(gè)補(bǔ)碼相加:1三十個(gè)零1 + 32個(gè)1 = 1三十一個(gè)零。所以? 負(fù)的最大正整數(shù)減一? 的補(bǔ)碼為:1三十一個(gè)零(十六進(jìn)制為0x80000000),那么可以推斷出其反碼是32個(gè)1,則源碼是1三十一個(gè)零,即-0,所以-0就是? 負(fù)的最大正整數(shù)減一? ,-0的源碼和補(bǔ)碼相同。

那么為什么最小的負(fù)數(shù)是? 負(fù)的最大正整數(shù)-1,為什么不能是負(fù)的最大正整數(shù)-2,或者減3......,因?yàn)橥ㄟ^計(jì)算,負(fù)的最大正整數(shù)的補(bǔ)碼+負(fù)二的補(bǔ)碼=0后面跟三十一個(gè)1,變成了最大的正整數(shù)。顯然是不對(duì)的,同一個(gè)補(bǔ)碼只能表達(dá)一種含義,減3同理,所以就規(guī)定最小的負(fù)數(shù)為負(fù)的最大正整數(shù)-1。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容