javascript 中的位运算符

2020-09-24 11:22:19 浏览数 (1)

位与(&)、位或(|)、位异或(^)、非位(~)

  • 左移(<<)、右移(>>)、无符号右移(>>>)

&(位与)

  • “&”运算符(位与)用于对两个二进制操作数,逐位取与

第一个数的位值

第二个数的位值

运算结果

1

1

1

1

0

0

0

1

0

0

0

0

|(位或)

  • “|”运算符(位或)用于对两个二进制操作数,逐位取或

第一个数的位值

第二个数的位值

运算结果

1

1

1

1

0

1

0

1

1

0

0

0

^(位异或)

  • “^”运算符(位异或)用于对两个二进制操作数,逐位取异或
  • 位数据相同得 0,不同得 false
  • 两个相同的数取异或的 0

第一个数的位值

第二个数的位值

运算结果

1

1

0

1

0

1

0

1

1

0

0

0

~(位非)

  • “~”运算符(位非)用于对一个二进制操作数,逐位取非 第 1 步:把运算数转换为 32 位的二进制整数。第 2 步:逐位进行取反操作。第 3 步:把二进制反码转换为十进制浮点数
  • 位非运算实际上就是对数字进行取负运算,再减 1 例如 ~5 等价于 -5-1 结果都是-6

<<(左移位)

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

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

>>(右移位)

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

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

>>>(无符号右移位)

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

  • 它把无符号的 32 位整数所有数位整体右移
  • 对于无符号数或正数右移运算,无符号右移与有符号右移运算的结果是相同的
  • 对于负数来说,无符号右移将使用 0 来填充所有的空位,同时会把负数作为正数来处理
代码语言:javascript复制
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

0 人点赞