有符号整、小数的原、反、补码表示范围,及补码比原、反码多表示一位的原因

来源:互联网 发布:和风天气json解析封装 编辑:程序博客网 时间:2024/05/17 03:02

  mark一下。
  以n位机器码为例。
1. 原码:
  有符号整数:[-(2^n-1), 2^n-1];
  有符号小数:[-(1-2^(-n)), 1-2^(-n)];
2. 反码的表示范围和原码相同
3. 补码
  有符号整数:[-2^n, 2^n-1];
  有符号小数:[-1, 1-2^(-n)];

  从上我们可以看出,有符号数的补码要比原码和反码多表示出一位来,那么究竟是为什么呢?

  补码比原码、反码多出一位的原因:
  以8位机器码表示的有符号整数为例,它可以表示的原码和反码范围是[-127, 127],而可以表示的补码范围是[-128, 127]。
  原码和反码的±0是不同的表示方法,即:
    +0:00000000
    -0 :10000000
  而反码的±0都是同一个表示方法,同样以8位机器码为例:
    ±0 :00000000
  因此补码中便多出了一个<10000000>,可以用来表示其他的数,此处即可以表示真值为-128。在最位的1,既表示负号、又表示数值位。

阅读全文
0 0
原创粉丝点击