原码
在讨论原码、反码、补码时,需要确定长度表示数的子长。以下讨论是在8bit的情况下。
8bit表示一个数时,第一位表示符号,0是正数,1是负数。
正数的原码是符号位为0+7bit的二进制的正数。
负数的原码是符号位1+7bit的二进制的(负数的绝对值)
举例
- 1的原码是0000 0001
- -1的原码是1000 0001
- 4的原码是0000 0100
- -4的原码是1000 0100
- 0的原码是0000 0000
反码
正数的反码就是原码
负数的反码是原码的基础上,符号位不变,其他7bit取反
举例
- 1的反码是0000 0001
- -1的反码是1111 1110
- 4的反码是0000 0100
- -4的反码是1111 1011
- 0的反码是0000 0000
补码
正数的补码就是原码
负数的补码时反码的基础上+1。符号位不变
举例
- 1的补码是0000 0001
- -1的补码是1111 1111
- 4的补码是0000 0100
- -4的补码是1111 1100
- 0的补码是0000 0000
逆向转换
反码转原码
正数的反码就是原码
负数的反码是在符号位不变的情况下,其他7bit取反,结果就是原码
举例
- 反码0000 0001的原码是0000 0001,是十进制的1
- 反码1111 1110的原码是1000 0001,是十进制的-1
- 反码0000 0100的原码是0000 0100,是十进制的4
- 反码1111 1011的原码是1000 0100,是十进制的-4
- 反码0000 0000的原码是0000 0000,是十进制的0
补码转反码
正数的补码就是反码
负数的补码-1就是反码。符号位不变
举例
- 补码:0000 0001的反码是0000 00001,是十进制的1
- 补码:1111 1111的反码是1111 1110,是十进制的1
- 补码:0000 0100的反码是0000 0100,是十进制的4
- 补码:1111 1100的反码是1111 1011,是十进制的-4
- 补码:0000 0000的反码是0000 0000,是十进制的0
补码转原码
正数的补码就是原码
负数的补码-1后再取反就是原码。符号位不变
举例
- 补码:0000 0001的原码是0000 0001,是十进制的1
- 补码:1111 1111的反码是1111 1110,原码是1000 0001,是十进制的-1
- 补码:0000 0100的原码是0000 0100,是十进制的4
- 补码:1111 1100的反码是1111 1011,原码是1000 0100,是十进制的-4
- 补码:0000 0000的原码是0000 0000,是十进制的0
特例
8bit的二进制,1bit的符号位。可以表示的数字范围是[-128,127]
127的原码,反码,补码都是0111 1111
-127的原码是1111 1111,反码是1000 0000,补码是1000 0001
-128的原码是1000 0000,反码是1111 1111,补码是1000 0000
0的原码是0000 0000,反码是0000 0000 补码是0000 0000