亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

——關于int(4字節)的取值范圍由來(-2^31~2^31-1)問題?(送分篇,能者居之)

1.一個字節占8位,所以總共是32位,然后去掉第一位,也即符號位(1:負,0:正),也就剩下31位!
2.所以最小值為:-2^31,最大值為2^31,然后去掉0(0000....0000)也即2^31-1!
3.所以最后得出的范圍是:-2^31~2^31-1?。ㄕ龜档姆秶话?)

(是這樣么,求專業人士批評指正)

正在回答

8 回答

第三簡直錯的離譜

0 回復 有任何疑惑可以回復我~

https://wenku.baidu.com/view/d17dd4ba1a37f111f1855b10.html

0 回復 有任何疑惑可以回復我~

不錯不錯 看懂了

0 回復 有任何疑惑可以回復我~

謝謝!看懂了哦!講的不錯

0 回復 有任何疑惑可以回復我~

——關于int(4字節)的取值范圍由來(-2^31~2^31-1)?
1.【32位】一個字節占8位,所以4字節總共是占32位,然后去掉第一位,也即符號位(1:負,0:正),也就剩下31位!

2.【最大值:2^31-1】為什么不是2^31?

(1)假設只有三位,其中首位為符號位的話,最大值的情況不就是011嗎?也即表示3.
3 = 2^(3-1)-1.

(2)32位的時候同理,01111111 11111111 11111111 11111111 //而這個數表示的值就是2^31-1.
2^31-1 = 2^(32-1)-1.

3.【最小值:-2^31】為什么不是-(2^31-1)?

(1)因為數據是由二進制補碼存儲的:
1)當原碼為正數的時候,正數的原碼反碼補碼都相同,即00011的反碼也為00011,補碼也為00011.
2)當原碼為負數的時候,反碼即按位取反,比如10011為原碼,10011可表示-3,那么符號位不變,其余位按位取反即反碼11100.那么10011的補碼便是11101.

(2)所以可知int所取的最小值原碼為:11111111 11111111 11111111 11111111.
它的反碼為:10000000 00000000 00000000 00000000. (在原碼中表示-0.)
它的補碼為:10000000 00000000 00000000 00000001. (在原碼中表示-1.)
依次可以類推-2,-3,-4......-2^31!
【推到-2^31】
其原碼為10000000 00000000 00000000 00000001?
其反碼為11111111 11111111 11111111 11111110
其補碼為11111111 11111111 11111111 11111111
從上可知最小值只能表示到-2^31,而無法表示到更小的一位:-2^31-1!


4.【綜上所訴,int(4字節)范圍是:-2^31~2^31-1】!

(自己對于這個問題也糾結了很久,得出的結論若有不足之處,敬請批評指正,謝謝?。?/p>

0 回復 有任何疑惑可以回復我~
#1

火Rain 提問者

其實我也是醉了
2015-03-05 回復 有任何疑惑可以回復我~
#2

晴耕雨讀

還是不明白為什么最小值只能表示到-2^31?
2017-10-27 回復 有任何疑惑可以回復我~

——【_wilsonjax的回答】

不是因為去掉0.。而是它本身的最大值就是2^31-1。而不是你說的2^31。
我們不考慮那么多位,假設只有三位,其中首位為符號位的話,最大值的情況不就是011嗎?32位的時候同理啊,
01111111 11111111 11111111 11111111 //而這個數表示的值就是(2^31)-1.

(支持的給個贊好么,哈哈)

3 回復 有任何疑惑可以回復我~

你理解的應該沒有什么問題。

通常的平臺上int型為32位,而且整型記法采用2的補碼,所以你的算法也沒錯。

0 回復 有任何疑惑可以回復我~
#1

火Rain 提問者

謝謝回答!
2015-03-02 回復 有任何疑惑可以回復我~

這個主要看你的編譯環境如果是c++編譯環境,int型占4個字節,如你所說正確,如果是單純的c編譯環境int型是占2個字節,因此最小值就為-2^15,最大值為2^15-1;你的思路是沒有錯的

0 回復 有任何疑惑可以回復我~
#1

onemoo

其實是與運行平臺有關的,不過char在C標準中規定占用一個字節,剩下的類型不同的平臺有不同的規范。 常見編譯器遵守ILP32或LP64規范,在這兩個規范中int都占用32位。
2015-03-01 回復 有任何疑惑可以回復我~
#2

火Rain 提問者

謝謝回答!
2015-03-02 回復 有任何疑惑可以回復我~
#3

火Rain 提問者 回復 onemoo

受教了,感謝!
2015-03-02 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

——關于int(4字節)的取值范圍由來(-2^31~2^31-1)問題?(送分篇,能者居之)

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號