原码
正数
正数中原码比较简单,直接将正数转换成二进制数,原码便是最高位为0其余位是该二进制数。位数不够时直接往前补0便可。比如42它的原码是如何计算出来的呢,如下图所示
最后它的原码便是:0101010若要求它的16位原码如何表示直接往前补0即可如42的16位原码是0000000000101010。
负数
负数中原码和正数类似,但是复杂一点,先求出此负数绝对值的二进制数,然后在最高位写1其他位写上负数绝对值的二进制即可。如-42它的绝对值42的二进制数为101010,则-42的原码为1101010若位数不够便让最高位为1然后中间补0最后写上该数绝对值的二进制数。如-42的16位原码为:1000000000101010
反码
反码是在原码基础上稍作变化就能得出的。
正数
正数的反码就是它的原码。如42的反码是0101010位数不够时往前补0即可,如42的16位反码是:0000000000101010
负数
负数的反码便是保持它原码的最高位不变,其余各位取反。取反的意思就是0变1,1变0。
比如-42的原码为1101010则它的反码是:1010101,位数不够时往前补1即可,如-42的16位反码:1111111111010101
补码
数字在计算机中是以补码存储的,补码也是用的最多的。
正数
正数的补码就是它的原码。如42的反码是0101010位数不够时往前补0即可,如42的16位补码是:0000000000101010
负数
负数的补码就是在它反码的基础上+1就行,比如-42的反码是1101010则它的补码是:1010110,位数不够时往前补1即可,如-42的十六位补码是:1111111111010110
小技巧
求补码
我计算负数的补码时不是先求负数的原码再求负数的反码,接着求负数的补码的。我们知道正数的原码等于反码等于补码比较好求。所以我们可以先求出正数的补码。比如42的原码反码补码为:0101010,若要求-42的反码,便可求它绝对值的42的反码然后再将数取反再+1便得到-42的反码:1010110。
求反码
正数的反码没什么好说的,负数的反码就是将正数反码按位取反便可,比如42的反码是0101010,-42的反码是1010101。
快速求出补码表示的数
负数可以先将它各位按位取反然后+1便可得到它表示的数的绝对值,然后加个符号便是这个负数。