但凡接触计算机相关知识的朋友们,应该都碰到过原码、反码、补码这三兄弟。那么接下来就简单的介绍一下他们的性格特点。
(一)总括
计算机中的有符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位三种表示方法各不相同。
(二)原码
是最简单的机器数表示法。用最高位表示符号位,‘1’表示负号,‘0’表示正号。其他位存放该数的二进制的绝对值。
例如:+1的原码是:0000 0001,-1的原码是1000 0001。
对于原码来说,由于第一位被用作了符号位,因此一个8位的二进制数,其表示范围是:[-127,127]。
(三)反码
正数的反码还是等于原码
负数的反码就是他的原码除符号位外,按位取反。
例如:+1的反码是:0000 0001,-1的反码是1111 1110。
对于反码来说,与原码类似,由于首位被用作了符号位,因此表示范围也是:[-127,127]。
(四)补码
正数的补码等于他的原码
负数的补码等于反码+1。
例如:+1的补码是:0000 0001, -1的补码是:1111 1111。
对于补码来说,虽然最高位也被用作了符号位,但是却可以表示-128,因此其取值范围是:[-128, 127]。
显而易见,
- 若要求得一个数值的补码,那么只需按原—反—补的步骤,求出每个码字;
- 若要求得一个数值的原码,那么只需按补—反—原的步骤,即:“减1取反”。
看到这,可能有的朋友会有迷惑求原码该是“取反加1”,其实对于二进制来说,“减1取反”和“取反加1”的效果是一样的,所以补码的补码就是原码源,这也为我们增加了一种求原码的方式,朋友们可以自己尝试一番,便可得出该结论。