首页 > 技术文章 > 二进制的原码,反码,补码简介

20183544-wangzhengshuai 2019-09-16 20:11 原文

二进制的原码,反码,补码简介

一,原码

1,正数的原码:将正数转换为二进制位就是这个正数的原码(高位为0,表示为正数,这个位置是符号位。)

例如:在计算机中,int 类型的十进制数10,的原码为:00000000 00000000 00000000 00001010。

           在计算机中,int 类型的十进制数8,的原码为:00000000 00000000 00000000 00001000。

2,负数的原码:将负数的绝对值转换成二进制位然后在最高位前补1就是这个负数的原码。(这个位置是符号位。)

例如:在计算机中,int 类型的十进制数-10,的原码为:10000000 00000000 00000000 00001010。

           在计算机中,int 类型的十进制数-8,的原码为:10000000 00000000 00000000 00001000。

二,反码

1,正数的反码:正数的反码就是原码。

例如:在计算机中,int 类型的十进制数10,的原码,和反码都为:00000000 00000000 00000000 00001010。

           在计算机中,int 类型的十进制数8,的原码,和反码都为:00000000 00000000 00000000 00001000。

2,负数的反码:负数的反码等于原码除符号位以外所有的位取反(即,除符号位以外,原码为1,则反码相对位置为0)

例如:在计算机中,int 类型的十进制数-10,的原码,和反码都为:11111111 11111111 11111111 11110101。

           在计算机中,int 类型的十进制数-8,的原码,和反码都为:11111111 11111111 11111111 11110111。

三,补码

1,正数的补码:正数的补码与原码相同,

例如:在计算机中,int 类型的十进制数10,的原码,反码和补码都为:00000000 00000000 00000000 00001010。

           在计算机中,int 类型的十进制数8,的原码,反码和补码都为:00000000 00000000 00000000 00001000。

2,负数的补码:负数的补码为 其原码除符号位外所有位取反,然后最低位加1(即反码加一)

(注:负数的求反码和补码的取反过程符号位是不参与计算的,要取出来,只有在进行负数补码的加减法的时候符号位才参与计算  ).

例如:在计算机中,int 类型的十进制数-10,的原码,反码和补码都为:11111111 11111111 11111111 11110110。

           在计算机中,int 类型的十进制数-8,的原码,反码和补码都为:11111111 11111111 11111111 11111000。

四,程序示例

java中的二进制:

public class binary {
    public static void main(String[] args) {
        System.out.println("Java二进制10: "+Integer.toBinaryString(10));
        System.out.println("Java二进制8: "+Integer.toBinaryString(8));
        System.out.println("Java二进制-10: "+Integer.toBinaryString(-10));
        System.out.println("Java二进制-8: "+Integer.toBinaryString(-8));
    }

}

运行结果:

五,总结

              1,正数的反码和补码都与原码相同。

      2,负数的反码为对该数的原码除符号位外各位取反。

    3,负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1

               4,在java中正整数是以原码形式存储的,负整数是以补码形式储存的。

推荐阅读