Js 位操作

#Bitwise #补码 #原码 #反码

Review

  1. 2019/01/30
  2. 2024-09-30 14:16

[!Summary] 补码=反码+1

一、Introduction #

用于在最基本的层次上(最底层,速度更快),按内存中表示数值的比特位来操作数值。

ECMAScript中的所有数值都以 IEEE-754 64位格式存储。但位操作符并不直接操作64位的值,而是先将64位的值转换成32位的整数,然后执行位操作,最后再将结果转换回64位。

对开发者而言,就好像只有32位整数一样,因为64位整数存储格式是不可见的。

数都使用二进制码存储。

  • 有符号的整数,第32位(位31)表示符号。0-正数,1-负数。
  • 正数以原码存储
  • 负数以补码的二进制编码存储

二补数(补码)的计算过程

  1. 绝对值二进制表示

  2. 求反码(原码取反)~ operation

  3. 结果+1(反码+1)

  4. 奇特的副作用:NaNInfinity 在位操作中被当成0处理

  5. 按位与 &:只有全是1才是1;

  6. 按位或 |:只要有1就是1,全为0才是0;

  7. 按位非 ~:返回数值的反码。本质是对操作数取反并减1

  8. 按位异或(XOR)^:相同为0,不同为1

  9. 左移 <<:(有符号左移,以0填充空位) 2«3 => 16

  10. 有符号右移 >>;数值向右移动,但保留符号。用符号位的值填充空位。

  11. 无符号右移 >>>:正数同有符号右移。负数的话,右移空位以0来填充,结果往往很大

Reference #