目录
原码、反码、补码是计算机的一种存储数据的格式,下面就让我们来学习一下吧!
1、无符号数 的 原码、反码、补码
例:123 原码:0111 1011
反码:0111 1011
补码:0111 1011
结论:无符号数,它的原码==反码==补码
注:==代表相等
2、有符号数 的 原码、反码、补码
2.1 有符号数 正数
例:123 原码:0111 1011
反码:0111 1011
补码:0111 1011
结论:有符号数的正数,它的原码==反码==补码
注:==代表相等
2.2 有符号数 负数
例1:-123 原码:1111 1011 -123的二进制数
反码:1000 0100 除了符号位不变,其他位按位取反(0变1,1变0)
补码:1000 0101 反码+1
例2:-10 原码:1000 1010 -123的二进制数
反码:1111 0101 除了符号位不变,其他位按位取反(0变1,1变0)
补码:1111 0110 反码+1
结论:有符号的负数,原码是其二进制数;反码是除了符号位不变,其他位按位取反(0变1,1变0);补码是反码+1。
3、结论
①无符号数、有符号正数 在内存中是以原码存储。
②有符号数负数 在内存中是以补码存储
4、补码的意义
到了这里,应该对原码、反码、补码有了一定的认识。
那么有人会问,原码、反码、补码究竟有什么用呢?为什么还需要补码呢?
4.1 统一了0的编码
我们都知道,有符号数的负数会出现+0、-0的情况,而+0、-0的补码相同。
有符号正数是按原码存储,所以+0的编码就是 0000 0000
有符号负数是按补码存储 -0 原码:1000 0000
反码:1111 1111
补码:1 0000 0000
-0的反码+1后变成了9位二进制位,但是一字节仅有8位二进制位,所以溢出了1位二进制位。取第八位后,-0的编码就是 0000 0000
结论:+0存储:0000 0000
-0存储:0000 0000
所以统一了0的编码
4.2 将减法运算变为加法运算
举例:计算 19-8=11
① 没有补码
显然,这个运算结果是错误的。
②有补码
首先计算-8的补码:原码:1000 1000
反码:1111 0111
-8 的 补码:1111 1000
运算正确。