——關(guān)于int(4字節(jié))的取值范圍由來(-2^31~2^31-1)問題?(送分篇,能者居之)
1.一個(gè)字節(jié)占8位,所以總共是32位,然后去掉第一位,也即符號(hào)位(1:負(fù),0:正),也就剩下31位!
2.所以最小值為:-2^31,最大值為2^31,然后去掉0(0000....0000)也即2^31-1!
3.所以最后得出的范圍是:-2^31~2^31-1?。ㄕ龜?shù)的范圍不包括0)
(是這樣么,求專業(yè)人士批評(píng)指正)
2017-04-10
第三簡(jiǎn)直錯(cuò)的離譜
2017-04-10
https://wenku.baidu.com/view/d17dd4ba1a37f111f1855b10.html
2016-07-04
不錯(cuò)不錯(cuò) 看懂了
2015-06-26
謝謝!看懂了哦!講的不錯(cuò)
2015-03-05
——關(guān)于int(4字節(jié))的取值范圍由來(-2^31~2^31-1)?
1.【32位】一個(gè)字節(jié)占8位,所以4字節(jié)總共是占32位,然后去掉第一位,也即符號(hào)位(1:負(fù),0:正),也就剩下31位!
2.【最大值:2^31-1】為什么不是2^31?
(1)假設(shè)只有三位,其中首位為符號(hào)位的話,最大值的情況不就是011嗎?也即表示3.
3 = 2^(3-1)-1.
(2)32位的時(shí)候同理,01111111 11111111 11111111 11111111 //而這個(gè)數(shù)表示的值就是2^31-1.
2^31-1 = 2^(32-1)-1.
3.【最小值:-2^31】為什么不是-(2^31-1)?
(1)因?yàn)閿?shù)據(jù)是由二進(jìn)制補(bǔ)碼存儲(chǔ)的:
1)當(dāng)原碼為正數(shù)的時(shí)候,正數(shù)的原碼反碼補(bǔ)碼都相同,即00011的反碼也為00011,補(bǔ)碼也為00011.
2)當(dāng)原碼為負(fù)數(shù)的時(shí)候,反碼即按位取反,比如10011為原碼,10011可表示-3,那么符號(hào)位不變,其余位按位取反即反碼11100.那么10011的補(bǔ)碼便是11101.
(2)所以可知int所取的最小值原碼為:11111111 11111111 11111111 11111111.
它的反碼為:10000000 00000000 00000000 00000000. (在原碼中表示-0.)
它的補(bǔ)碼為:10000000 00000000 00000000 00000001. (在原碼中表示-1.)
依次可以類推-2,-3,-4......-2^31!
【推到-2^31】
其原碼為10000000 00000000 00000000 00000001?
其反碼為11111111 11111111 11111111 11111110
其補(bǔ)碼為11111111 11111111 11111111 11111111
從上可知最小值只能表示到-2^31,而無法表示到更小的一位:-2^31-1!
4.【綜上所訴,int(4字節(jié))范圍是:-2^31~2^31-1】!
(自己對(duì)于這個(gè)問題也糾結(jié)了很久,得出的結(jié)論若有不足之處,敬請(qǐng)批評(píng)指正,謝謝?。?/p>
2015-03-03
——【_wilsonjax的回答】
不是因?yàn)槿サ?.。而是它本身的最大值就是2^31-1。而不是你說的2^31。
我們不考慮那么多位,假設(shè)只有三位,其中首位為符號(hào)位的話,最大值的情況不就是011嗎?32位的時(shí)候同理啊,
01111111 11111111 11111111 11111111 //而這個(gè)數(shù)表示的值就是(2^31)-1.
(支持的給個(gè)贊好么,哈哈)
2015-03-01
你理解的應(yīng)該沒有什么問題。
通常的平臺(tái)上int型為32位,而且整型記法采用2的補(bǔ)碼,所以你的算法也沒錯(cuò)。
2015-03-01
這個(gè)主要看你的編譯環(huán)境如果是c++編譯環(huán)境,int型占4個(gè)字節(jié),如你所說正確,如果是單純的c編譯環(huán)境int型是占2個(gè)字節(jié),因此最小值就為-2^15,最大值為2^15-1;你的思路是沒有錯(cuò)的