计算机中所有的运算底层都是01二进制表示的,在计算机运算过程中如何表示基本的加减乘除运算呢?
首先需要注意的一点就是,计算机在运算过程中没有减法,只有加法,那么如何表示1-1呢?
计算机如何表示1和-1呢?
在二进制中首位表示正负,首位为0表示这个数是正数,首位为1表示这个数位负数,其他数位表示这个数的绝对值,1-1 = 1+(-1)
运算 | 十进制 | 二进制 |
---|---|---|
1 | 0000 0001 | |
-1 | 1000 0001 | |
+ | 0 | 1000 0010 |
我们可以看到1+(-1)通过二进制计算后结果转换为十进制的数为:-2
这样的结果明显是不对的,基于以上的问题,人们发明了反码:
如果是正数,反码和原码一样;如果是负数,符号位不变其余的各位取反,0变为1,1变为0.
运算 | 十进制 | 二进制 | 反码 |
---|---|---|---|
1 | 0000 0001 | 0000 0001 | |
-1 | 1000 0001 | 1111 1110 | |
+ | 0 | 1000 0010 | 1111 1111 |
这样得到的结果就是1111 1111 因为这个结果是反码,在取反就可以了,得到的结果1000 0000 这个二进制数字转换过来就是-0,但是现实中不会存在+0和-0的,这就用到了补码;
补码:如果是正数,补码和原码一样,如果是负数,则在反码上加1(相当于将原码数值位取反然后在最低位加1)
运算 | 十进制 | 二进制 | 反码 | 补码 |
---|---|---|---|---|
1 | 0000 0001 | 0000 0001 | 0000 0001 | |
-1 | 1000 0001 | 1111 1110 | 1111 1111 | |
+ | 0 | 1000 0010 | 1111 1111 | 0000 0000 |
这样就得到我们需要的正确的结果了。
1+(-2) = -1
运算 | 十进制 | 二进制 | 反码 | 补码 |
---|---|---|---|---|
1 | 0000 0001 | 0000 0001 | 0000 0001 | |
-2 | 1000 0010 | 1111 1101 | 1111 1110 | |
+ | -1 | 1000 0001 | 1111 1110 | 1111 1111 |
计算结果是1111 1111 它的补码就是:1000 0001也就是十进制的-1
aaa