一、原码
正数的原码:一个正数,按照绝对值大小转换成的二进制数,称为这个正数的原码。
负数的原码: 一个负数,按照绝对值大小转换成二进制数,然后最高位补1,称为这个负数的原码。
例如 00000000 00000000 00000000 00000101 是5的原码
10000000 00000000 00000000 00000101 是-5的原码
00000000 00000000 00000000 00001010 是10的原码
10000000 00000000 00000000 00001010 是-10的原码
二、反码
正数的反码:正数的反码和原码相同。
负数的反码:负数的反码是对其原码除最高位外每一位都取反(每一位取反,除最高位)
例如 5的原码是 00000000 00000000 00000000 00000101
5的反码是 00000000 00000000 00000000 00000101 没变
-5的原码是 10000000 00000000 00000000 00000101
最高位不变,其余各位都取反(如果是1则取0,如果是0则取1)
所以 -5的反码是 11111111 11111111 11111111 11111010
10的原码是 00000000 00000000 00000000 00001010
10的反码是 00000000 00000000 00000000 00001010 没变
-10的原码是 10000000 00000000 00000000 00001010
最高位不变,其余各位都取反(如果是1则取0,如果是0则取1)
-10的反码是 11111111 11111111 11111111 11110101
三、补码
正数的补码:正数的补码和原码相同。即正数的原码、反码和补码都相同。
负数的补码:负数的补码是是对其原码除最高位外每一位都取反,然后在最低位加1,就是负数的补码
例如: -5的原码是 10000000 00000000 00000000 00000101
首先是对其原码除最高位外每一位都取反 (如果是1则取0,如果是0则取1)-5的原码最高位是 1,取反后最高位还是 1
即 11111111 11111111 11111111 11111010
然后在最低位加1 即 11111111 11111111 11111111 11111010 + 1
那么-5的补码是 11111111 11111111 11111111 11111011
-1 的原码:10000000 00000000 00000000 00000001
-1 的反码:11111111 11111111 11111111 11111110 (对其原码除最高位外每一位都取反)
-1的补码: 11111111 11111111 11111111 11111111 (对其原码除最高位外每一位都取反 再加1)
补充说明:(1)最高位就是符号位,正数的原码符号位是 0 ,负数的原码符号位是 1.
(2)负数的求反码和补码的取反过程符号位是不参与计算的,要取出来,只有在进行负数补码的加减法的时候符号位才参与计算
四、程序代码说明
代码说明:
1 public class test { 2 public static void main(String[] args) { 3 System.out.println("二进制5: "+Integer.toBinaryString(5)); 4 System.out.println("二进制10: "+Integer.toBinaryString(10)); 5 System.out.println("二进制-5: "+Integer.toBinaryString(-5)); 6 System.out.println("二进制-10: "+Integer.toBinaryString(-10)); 7 System.out.println("二进制 1: "+Integer.toBinaryString(1)); 8 System.out.println("二进制-1: "+Integer.toBinaryString(-1)); 9 } 10 11 }
输出结果:
总结:
(1)正数的反码、补码都与原码相同。
(2)负数的反码为对该数的原码除最高位(或符号位)外各位取反。
(3)负数的补码为对该数的原码除最高位(或符号位)外各位取反,然后在最后一位(或最低位)加1
五、结论
java中的数,正数是用原码形式表达的,负数使用补码形式表达的。