什么是原码、反码、补码?
计算机中的符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。
原码:
在数值前直接加一符号位的表示法。
例如-7的原码是1
0000111
反码:
正数的反码与其原码相同;
负数的反码是对其原码逐位取反,但符号位除外。
例如-7的反码是1
1111000
补码:
正数和+0的补码是其原码,负数则先计算其反码,然后反码加上1,得到补码
##########################分界线##################################
为什么要提出补码呢?
我查阅了一些材料,得到如下总结:
最原先最简单的是原码,但是因为原码存在一个运算的问题:
十进制 | 原 码 |
---|---|
1 | 0000 0001 |
-1 | 1000 0001 |
加法结果 | 1000 0001 |
十进制结果 | -2 |
这样最基础的运算如果按照计算机逻辑则会出错,即
原码是有符号数的最简单的编码方式,便于输入输出,但作为代码加减运算时较为复杂,故计算机一般不采用这种编码方式存储符号数。
于是提出了反码,但是反码出现了另一个问题:
计算结果会出现1000 0000(-0)
这样的存在,于是会出现二进制与十进制的互换不再是一一对应的关系这样的问题,增加计算难度,故也被抛弃。
随后提出了基于反码的-0
问题而诞生的补码,专门用来解决-0
的问题。
补码换算为原码
的过程中,如果补码是正数或者+0的补码,则其原码就是补码本身;如果补码是负数或者-0的补码,则其原码的计算方法是,先将补码减掉1,得到反码,再将反码取反,得到原码。