第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java整形溢出處理機制。

Java整形溢出處理機制。

ibeautiful 2018-08-29 17:32:08
代碼:    int a = 2147483647;    System.out.println(a);    int b = a + 1;    System.out.println(b);結果:    2147483647    -2147483648有大神可以給我講講數值從2147483647變成-2147483648的原理嗎?Java中是如何處理整形溢出的。
查看完整描述

2 回答

?
拉莫斯之舞

TA貢獻1820條經驗 獲得超10個贊

int類型二進制存儲的第一位為符號位,0表示正數,1表示負數,2147483647這個數字的的二進制表達為01111111111111111111111111111111,加1以后的值為10000000000000000000000000000000,而10000000000000000000000000000000表示的是-2147483648這個數字.

查看完整回答
反對 回復 2018-09-16
?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

這涉及到計算機中數值的表示方法,計算機中整型數值是用【補碼】來表示的。
詳情可以參考這里:《原碼, 反碼, 補碼 詳解》

簡單的說,就是用字節(jié)的最高位表示符號的正負,0代表正,1代表負;但是這個符號位也會參與運算,java的int是4個字節(jié),每個字節(jié)8位,所以int的最大值用二進制表示就是:

01111111 11111111 11111111 11111111;

將這個值加一時,從右往左一直進位,結果是:

10000000 00000000 00000000 00000000,

注意,最高位為1,表示負數,本來這個結果在原碼里代表-0,但是補碼消除了消除了+0和-0的冗余和歧義,使0只用一個表達方式就是:

00000000 00000000 00000000 00000000

反正放著“10000000 00000000 00000000 00000000”不用白不用,所以就用這個結果把補碼的表示范圍擴大一位,使其表達為最小值,而且這個值能滿足運算的結果表示,即(-2147483647) + (-1)等等結果確實是這個值;比如,如果用反碼,最小值是-2147483647,因為用的是補碼,所以這個值不用白不用,不讓它表示0,那就讓它表示-2147483648(-2147483647 + (-1))吧


查看完整回答
反對 回復 2018-09-16
  • 2 回答
  • 0 關注
  • 857 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

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

公眾號

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