我們都知道位運算符比正常的運算符速度要快,但是為什么會快呢?首先我們正常的運算符也是通過計算機通過位運算調用棧來實現的。
那么javascript位運算符有哪些呢?
1. & 按位與
2. | 按位或
3. ^ 按位異或
4. ~ 取反
5. >> 按位左移
6. >> 按位右移
說明:
(1)位運算符中除 ~ 外,均為二目運算符,即要求出側各有一個運算量。
(2)運算早只能是整型或字符型的數據,不能為實型數據。
1.按位與 &
左值與右值都為true,則為true,否則就為false。
console.log(5&7);//5 首先我們先把5跟轉成2進制,2進制是逢二進一,什么意思呢?如下圖,得到的總數就是 1+0*(2*1)+1*(2*2)=5=101,同理可以得到7=1+1*(2*1)+1*(2*2) =111
那么根據位運算的道理,兩個都要一樣才為true,否則為0,那么5&7 得到的就是 101 & 111 ==101 = 5
2.按位或 |
左值與右值只要有一個為true,則為true,否則就為false。
console.log(5|7);//7
console.log(5|7);//7 首先我們先把5跟轉成2進制,2進制是逢二進一,什么意思呢?如下圖,得到的總數就是 1+0*(2*1)+1*(2*2)=5=101,同理可以得到7=1+1*(2*1)+1*(2*2) =111
那么根據位運算的道理,只要一個為true,就為1,否則為0,那么5&7 得到的就是 101 | 111 ==111 = 7
3.按位異 ^
若參與計算的兩個二進位為同號則為0,異號則為1
console.log(true ^ true);//0 console.log(true ^ false);//1 console.log(false ^ false);//0 console.log(false ^ true);//1
console.log(5^7);//2 首先我們先把5跟轉成2進制,2進制是逢二進一,什么意思呢?如下圖,得到的總數就是 1+0*(2*1)+1*(2*2)=5=101,同理可以得到7=1+1*(2*1)+1*(2*2) =111
那么根據位運算的道理,兩個同號就為0,異號就為1,那么5^7 得到的就是 101 ^ 111 ==010 = 2
4.按位取反 ~
console.log(~2.5);//-3 取反之后向下取整
5.按位左移 <<
按位左移相當於 *2^n 2的n次方 並且向下取整
console.log(5<<2);//20 5*x2*2=20
6.按位右移 >>
按位右移相當於 /2^n 除以2的n次方 並且向下取整
console.log(5>>2);//1 5*/(2*2)=1.25 向下取整為 1