原码、反码、补码 以及 浮点数的二进制表示

真值

计算机机器数真正的值称为真值。因为机器数的最高位是符号位,所以我们在计算真值的时候要分区分开。 比如机器数10000101,单纯作为一个二进制数,我们转换为十进制是133。但是其真值是不计算符号位的,其最高位的1表示"-"。所以10000101的真值为-5。

下面的讨论以字长8为例

原码

原码=符号位+真值。比如:

[+5]原码=0 000010
[-5]原码=1 000010
原码表示与真值对应直观,而且转换也简单,但直接计算会出问题,需要一系列的转换,详细参考:www.imooc.com/article/213…

反码

正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。但因为进位会导致问题。详细参考:www.imooc.com/article/213…

补码

补码:正数的补码与原码相同,负数的补码等于其反码的末位加1。
+0 和 -0 的表示,在原码和反码都有两种形式,但是补码却只有一种:

[+0]=[0000 0000]原=[0000 0000]反=[0000 0000]补
[-0]=[1000 0000]原=[1111 1111]反=[0000 0000]补
这样10000000本来是表示-0的就可以省出来表示一个其他的数了,当前用来表示-128(因为正常已经可以表示到-127了),所以这才有了short类型的表示范围:-128~127

扩展

对于16位数据,signed short -1 转成 unsigned short 为 65535 是因为:
-1的原码为:10000000 00000001,对应的补码是:补码是 11111111 11111111
而unsigned short 65535的补码也是11111111 11111111 因此在二进制表示上是一致的!
11111111 11111111 = 2的16次方 - 1 = 65536 - 1 = 65535

参考:short si=–32768; unsigned short usi=si; 输出usi是多少? - Milo Yip的回答 - 知乎 www.zhihu.com/question/28…

浮点数的二进制表示

参考:www.ruanyifeng.com/blog/2010/0…

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值