补码反码

125 阅读1分钟

计算机字长

用几位二进制数表示数字,二进制数的计数规则是逢二进一,借一当二

符号位

最高位就是符号位。例如:数字用4位二进制位表示,那么最高位就是符号位,

无符号数

  • 机器字长的全部二进制位都是数值位

  • 如果最高位为1那么,无符号数取补码 === 有符号数

  • 8位二进制的值域:[0,255]

    0000,0000 1111,1111
    

有符号数

  • 机器字长的二进制位包含最高位的符号位(0 或1) + 数值位(也称为真值域)

  • 如果符号位为1那么,有符号数取补码 === 无符号数

  • 8位二进制的值域:[-128,127]

    1000,0000 ~ 0111,111
    

原码

原码是带符号的绝对值表示

反码

  • 0
  • 正数:与原码相同
  • 负数:符号位不变,数值位取反

补码

计算机中正数负数的加减运算都是通过补码来完成的,最后再转换为原码。因为是如果使用原码、反码来进行加减的话,结果有误。

  • 0: 他本身
  • 正数:与原码相同
  • 负数:负数的反码 + 1。如果发生溢出,那么符号位不变,溢出的舍弃。 image.png image.png

位移运算

位运算是基于二进制bit来的,对于数的运算,要先转换为二进制之后再运算。

无符号位运算

左移 <<

m<<n = m * 2^n:m左移n位之后的值 === m * 2的n次方

有符号位运算

符号位不变,数值位左移或右移

参考

  1. juejin.cn/post/690831…

  2. mp.weixin.qq.com/s/u_AZOEIf2…