关于二进制的原码 、反码、补码的简要解释说明

一、原码

正数的原码:一个正数,按照绝对值大小转换成的二进制数,称为这个正数的原码。

负数的原码: 一个负数,按照绝对值大小转换成二进制数,然后最高位补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中的数,正数是用原码形式表达的,负数使用补码形式表达的。

原文地址:https://www.cnblogs.com/yang2000/p/11537725.html