在java中一个字节由8个二进位组成。
计算机中有原码,反码,和补码。
原码
将最高为作为符号位0正,1负。其余各位表示数值的绝对值。
+7的原码是 00000111
-7的原码是 10000111
原码的问题是+0和-0的表示
+0是00000000
-0是 10000000
2个数值不同。
反码
一个数如果为正,则它的反码与原码相同,如果为负,则符号位为1,其余取反。
+7是00000111
-7 是 11111000
反码的问题也是+0和-0的问题
+0是 00000000
-0 是 11111111
2个数值不同。
补码
利用溢出,我们将减法变成加法。 一个数如十进制,一个字节一个数,有8位,超过就进一。
一个数为正,则它的原码,反码,补码相同。如果为负,则符号位为1,其余对原码取反。然后加1
+7是 00000111
-7是 11111001
+0是00000000
-0是100000000,然后丢掉最高的9位则为00000000
和+0的表示相同,所以计算机中是采用的是补码。
已知一个负数的补码,转换为十进制。
- 先对各位取反。
- 将其转换为十进制数
- 加上负号,再减去1.
如 11111010 先取反
00000101 转换为十进制
是5 加上负号
是-5 再减去1
是-6