这是我参与11月更文挑战的第4天,活动详情查看:2021最后一次更文挑战
你是否在看到一个变量的前面有诸如 ~/ ** 等特殊符号而不知道是什么意思? 的确! JavaScript 中存在很多特殊的符号, 我们对加减乘除特别熟悉, 而这些特殊符号由于用的较少, 却不太熟悉, 在看一些源码或者大佬的代码时有些迷茫, 这是什么操作?! 那就来学习一下位运算符吧!
JavaScript 的特殊符号之 位运算符
比方说这个 ** 这个运算符也是用的比较少的, 这个** 是幂运算.
还有 <<, >> 这两个可还熟悉?
左移操作符 (
<<) 将第一个操作数向左移动指定位数,左边超出的位数将会被清除,右边将会补零。
const a = 5; // 00000000000000000000000000000101
const b = 2; // 00000000000000000000000000000010
console.log(a << b); // 00000000000000000000000000010100 ==> 20
在一些语言中, 可能习惯用左移和右移代替乘除, 但是要在 JavaScript 中使用, 则需要舍弃数值中的最高的 22位有效数字. 有些时候这22位的确可以忽略, 但在很多时候22位是不能忽略的. 所有在 JavaScript 中使用的比较少.
位运算符知多少?
这里两个应该熟悉的: 与运算(&) 和 或运算(|), 还有, 异或运算(^)? , 注意别和 && 和|| 记混淆了!
| # | 位运算符号 | 作用解释 |
|---|---|---|
| 1 | & | 与运算 |
| 2 | | | 或运算 |
| 3 | ^ | 异或运算 |
| 4 | << | 左移 |
| 5 | >>> | 右移 |
| 6 | >> | 带符号扩展右移 |
| 7 | ~ | "非"运算 |
当然 JavaScript 中还有唯一的一个一元位运算符, ~, 它表示 "非" 运算,
在
JavaScript中进行位运算的时候, 首先会将其转换为 32 位有符号整型(int)并计算, 然后在得到结果后再将其转换为JavaScript的数值类型.
show me code
let result1 = 1 & 1
let result2 = 1 & 2
let result3 = 1 | 1
let result4 = 1 | 2
document.write(result1, result2, result3, result4) // 1013
console.log(result1, result2, result3, result4) // 1 0 1 3
学贵坚持, 加油
学习一个知识点, 在理解的基础上, 记录下来, 日积月累, 相信我们都能成为大神(梦想总是要有的~)!