原码、反码、补码

原码

在讨论原码、反码、补码时,需要确定长度表示数的子长。以下讨论是在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

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值