原码
最高位表示符号为 。剩下的位数 是这个数的绝对值的二进制
比如
10的原码就是
00000000 00000000 00000000 00001010
-8的原码
10000000 00000000 00000000 00001000
-20 的源码
10000000 00000000 00000000 00010100
反码
正数的反码就是 其原码
负数的反码 就是在其源码基础上 符号为不变。其他位取反
10 的反码=原码
00000000 00000000 00000000 00001010
-8的原码
10000000 00000000 00000000 00001000
-8的反码
11111111 11111111 11111111 11110111
补码
补码:正数的补码就是其源码。
负数的补码就是在其反码的基础之上+1
正数就不说了
直接说负数
-8的原码
10000000 00000000 00000000 00001000
-8的反码
11111111 11111111 11111111 11110111
-8的补码
11111111 11111111 11111111 11111000
任何数据都是以其二进制的补码形式存储在内存中的。
为什么数据中要以补码的形式存储呢?因为使用补码来计算效率是最高的!~
因为计算机中只有加法没有减法。为了更加低成本的计算结果,所以用补码来存储数据
3-2 这个减法运算对于计算机而言的理解是3+(-2)
使用源码计算
3源码
00000000 00000000 00000000 00000011
-2源码
10000000 00000000 00000000 00000010
-------------------------------------------------------------
10000000 00000000 00000000 00000101 结果是1个负数 明显是不对的
使用用反码计算
3反码
00000000 00000000 00000000 00000011
-2反码
11111111 11111111 11111111 11111101
-----------------------------------------------------------------
1 00000000 00000000 00000000 00000000 多出位数不要 结果是0 明显结果也不对
使用用补码计算
3补码
00000000 00000000 00000000 00000011
-2 补码
11111111 11111111 11111111 11111110
---------------------------------------------------------
1 00000000 00000000 00000000 00000001 多出位数不要 结果是1 结果就是我们想要的结果了