小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
大家都对运算符都很熟悉了吧, 先来个简单的你知道 ** 这个运算符吗?不要思考, 快速说出来吧 (可能因为用到的比较少, ** 这是幂运算).
那你知道 typeof也是一个运算符吗? typeof 是一个前缀运算符
还有 <<, >> 这个两个呢?
看源码提高自己编码水平. 经常会遇到一些高级操作(就是看不懂的代码), 其中就包括 位运算. 相信很多人对位运算符这个特别的运算符不太熟悉(<< >>> >>), 这并不是'书名号'! 本文详细学习下 位运算符 知识点.
位运算符的种类
我们都熟悉的 与运算(&) 和 或运算(|), 那 异或运算(^) 呢? 这里是不是想到了常见的 && 和||, 注意别混淆了!
当然还有 JavaScript 中唯一的一个一元位运算符, ~一个波浪号, ta 表示 "非" 运算, 也会遇到
| # | 位运算符 | 说明 |
|---|---|---|
| 1 | ~ | "非"运算 |
| 2 | & | 与运算 |
| 3 | | | 或运算 |
| 4 | ^ | 异或运算 |
| 5 | << | 左移 |
| 6 | >>> | 右移 |
| 7 | >> | 带符号扩展右移 |
在 JavaScript 中作位运算的时候, 会首先将其转换为 32 位有符号整型(int)并计算, 然后在得到结果后再将其转换为 JavaScript 的数值类型.
在进行位运算的时候, 最高 22 位上的有效数字会直接丢失, 而且不给抛出警告信息(无语...)...
定义往往晦涩难懂, 来看代码(代码也看不懂了..)
let r1 = 1 & 1
let r2 = 1 & 2
let r3 = 1 | 1
let r4 = 1 | 2
document.write(r1, r2, r3, r4) // 1013
console.log(r1, r2, r3, r4) // 1 0 1 3