小书童
发布时间

javascript中的位运算符

作者
SyntaxDescription
HeaderTitle
ParagraphText
  • 位与(&)、位或(|)、位异或(^)、非位(~)
  • 左移(<<)、右移(>>)、无符号右移(>>>

&(位与)

  • “&”运算符(位与)用于对两个二进制操作数,逐位取与
第一个数的位值第二个数的位值运算结果
111
100
010
000

|(位或)

  • “|”运算符(位或)用于对两个二进制操作数,逐位取或
第一个数的位值第二个数的位值运算结果
111
101
011
000

^(位异或)

  • “^”运算符(位异或)用于对两个二进制操作数,逐位取异或
  • 位数据相同得 0,不同得 false
  • 两个相同的数取异或的 0
第一个数的位值第二个数的位值运算结果
110
101
011
000

~(位非)

  • “~”运算符(位非)用于对一个二进制操作数,逐位取非 第 1 步:把运算数转换为 32 位的二进制整数。 第 2 步:逐位进行取反操作。 第 3 步:把二进制反码转换为十进制浮点数

  • 位非运算实际上就是对数字进行取负运算,再减 1 例如 ~5 等价于 -5-1 结果都是-6

<<(左移位)

<<”运算符执行左移位运算

  • 在移位运算过程中,符号位始终保持不变
  • 如果右侧空出位置,则自动填充为 0;超出 32 位的值,则自动丢弃
console.log(5 << 1) // 10
//  .... 00 0101   ->  5
//  向右移动1位
//  .... 00 1010   ->  10

>>(右移位)

“>>”运算符执行有符号右移位运算

  • 把数字中的所有有效位整体右移,再使用符号位的值填充空位
  • 移动过程中超出的值将被丢弃
console.log(10 >> 1) // 5
//  .... 00 1010   ->  10
//  向左移动1位
//  .... 00 0101   ->  5

>>>(无符号右移位)

“>>>”运算符执行五符号右移位运算

  • 它把无符号的 32 位整数所有数位整体右移
  • 对于无符号数或正数右移运算,无符号右移与有符号右移运算的结果是相同的
  • 对于负数来说,无符号右移将使用 0 来填充所有的空位,同时会把负数作为正数来处理
console.log(5 >>> 1) // 2
//  .... 00 0101   ->  5
//  向左移动1位
//  .... 00 0010   ->  2

console.log(-5 >>> 1) // 2147483645
//  100... 00 0101   ->  5
//  向左移动1位
//  010... 00 0010   ->  2147483645

组合位运算

  • ^= a^=b 等价 a = a^b

  • ~~ ~~a 等价 ~(~a) 等价 a