整数的二进制表示形式有三种:原码、反码和补码。
1.正整数的原码、反码、补码是相同的
2.负整数的原码、反码、补码则需要计算
正整数和负整数都可以写出二进制原码
1.根据正负直接写出的二进制序列即为原码。
1个整形是4个字节,即32个bit位,即写出的二进制序列包含32位,其中首位为符号位,0表示正数,1表示负数。如:
int a = 15;
15的原码为0000 0000 0000 0000 0000 0000 0000 1111,首位为0
int b = -15;
-15的原码为1000 0000 0000 0000 0000 0000 0000 1111,首位为1
其中a为正数,所以其反码和补码都为15的原码:
0000 0000 0000 0000 0000 0000 0000 1111
b的反码该怎么求呢?
我们只需要保持原码的符号位不变,其它位取反得到的就是反码
即b的反码为:1111 1111 1111 1111 1111 1111 1111 0000
补码只需要在反码的基础上加1即可得到。
即b的补码为:1111 1111 1111 1111 1111 1111 1111 0001
为了方便大家对比,在此对-15的三种二进制表示进行整理:
当整数较大的时候我们该怎么求它的原码呢?
我们需要将该数一直除以2并取得它的余数,直到商为0后,从后往前读取余数,并在其前面添加足够的0直到符号位,符号位根据正负取定。比如220343的原码(负数类似)求法如图: