int a =2147483647;
System.out.println(a);
intb = a +1;
System.out.println(b);
result:
2147483647
-2147483648
簡單的說,就是用字節(jié)的最高位表示符號的正負(fù)棕诵,0代表正裁良,1代表負(fù);但是這個(gè)符號位也會(huì)參與運(yùn)算校套,java的int是4個(gè)字節(jié)价脾,每個(gè)字節(jié)8位,所以int的最大值用二進(jìn)制表示就是:
01111111 11111111 11111111 11111111
將這個(gè)值加一時(shí)笛匙,從右往左一直進(jìn)位侨把,結(jié)果是:
10000000 00000000 00000000 00000000
注意,最高位為1妹孙,表示負(fù)數(shù)秋柄,本來這個(gè)結(jié)果在原碼里代表-0,但是補(bǔ)碼消除了消除了+0和-0的冗余和歧義蠢正,使0只用一個(gè)表達(dá)方式就是:
00000000 00000000 00000000 00000000
反正放著“10000000 00000000 00000000 00000000”不用白不用骇笔,所以就用這個(gè)結(jié)果把補(bǔ)碼的表示范圍擴(kuò)大一位,使其表達(dá)為最小值,而且這個(gè)值能滿足運(yùn)算的結(jié)果表示笨触,即(-2147483647) + (-1)等等結(jié)果確實(shí)是這個(gè)值懦傍;比如,如果用反碼旭旭,最小值是-2147483647谎脯,因?yàn)橛玫氖茄a(bǔ)碼,所以這個(gè)值不用白不用持寄,不讓它表示0源梭,那就讓它表示-2147483648(-2147483647 + (-1))