在java虛拟機中整數有byte、short、int、long四種 分别表示 8位、16位、32位、64位有符号整數。整數使用補碼表示。
是以我們先了解一下原碼和反碼。
所謂原碼就是符号位加上數字的二進制表示,int為例,第一位表示符号 (0正數 1負數)簡單期間一個位元組表示
+7的原碼為: 00000111
-7的原碼為: 10000111
對于原碼來說,絕對值相等的正數和負數隻有符号位不同。
一個數如果為正,則它的反碼與原碼相同;一個數如果為負,則符号位為1,(符号位不變化,其餘位數取反)。
換言之 該數的絕對值取反(絕對值取反各位都取反)。
為了簡單起見,我們用1個位元組來表示一個整數:
+7的反碼為:00000111
-7的反碼為: 11111000
補碼:一個數如果為正,則它的原碼、反碼、補碼相同;一個數如果為負,去到反碼然後加1。(反碼加1就是補碼)為了簡單起見,我們用1個位元組來表示一個整數:
+7的補碼為: 00000111
-7的補碼為: 11111001
正數:它的原碼、反碼、補碼相同。
負數:反碼符号位不變化,其餘位數取反,補碼符号位不變化其餘各位原碼取反(反碼)+1換言之 反碼+1
已知一個負數原碼求反碼:
步驟:
1.該數的絕對值取反
已知一個負數反碼去求補碼:
1.反碼+1
已知一個負數求反碼步驟:
正數的絕對值取反+1
已知一個負數求補碼步驟:
1.二進制原碼表示
2.符号位不變化為1 求反碼。
3.符号位不變化,其餘的加1.
執行個體如下:
-10求補碼步驟:
-10的原碼: 10000000 00000000 00000000 00001010
-10的反碼: 11111111 11111111 11111111 11110101
-10的補碼:11111111 11111111 11111111 11110110
已知一個負數的補碼,将其轉換為十進制數,步驟
1、先對各位取反;
2、将其轉換為十進制數;
3、加上負号,再減去1。
例如:
11111010,最高位為1,是以是負數,先對各位取反得00000101,轉換為十進制數得5,加上負号得-5,再減1得-6。
1.确定byte是1個位元組,也就是8位。
2.最大值 0111 1111
3.最小值 1000 0000。
4.0111 1111 就是127。
5.1000 0000 減去1是 1111 1111 按照位取反 1000 0000 得到-128
int a=232;
//0000 0000 1110 1000
System.out.println(Integer.toBinaryString(a));
System.out.println((byte) a);
輸出結果為-24:
原理如下圖:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2QvwVe0lmdhJ3ZvwFM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2LcZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39zNwEjM1QDM0EzNyMDM2EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)