前言
js中有位運算子:與( & )、或( | )、按位取反(~)、異或( ^ )、左移位( << )、右移位( >> )。下面就具體來說說這些位運算子。
首先,需要明白一點,js進行位運算子時,都是將運算元轉換為二進位制在進行的,畢竟是按位運算。一般情況下,都是十進位制轉二進位制,遇到其他進製,也可以先轉化為十進位制,然後在轉為二進位制。
… 128 64 32 16 8 4 2 1
我一般轉換二進位制的時候,先是將2的冪次方值依次從右往左列出,然後看看如何能讓最少的幾位數相加之和與所轉換值相等,比如13,那麼應該是8+4+1,然後就在對應的數字下面寫1,結果如下表
…128
6432168
421…
1101
然後又在空白處填上0,第一位非0數字位前的就不用填充了,那麼最後得到13的二進位制數為:1101。
規則: 兩位同為「1」,結果為「1」,否則為0。
13 & 6 ==> 4
運算元/結果84
21131
1016
0110
結果010
0規則: 兩位中任意一位為「1」,結果為「1」,否則為0。
13 | 6 == > 15
運算元/結果84
21131
1016
0110
結果111
1規則: 運算元求負再減一。
~13 == > -14
實際的計算步驟:
將13(原碼)轉二進位制:00001101
按位取反:11110010
發現符號位(即最高位)為1,表示負數,除符號位的其他位取反:1001101
末位加1取其補碼:1001110
補碼轉換為10進製:-14
規則: 兩位不同,結果為「1」,否則為0。
13 ^ 6 == > 11
運算元/結果84
21131
1016
0110
結果101
1規則:將數值向左移動若干位,用0補足。
13 << 2 == > 52
過程32168
421原始數11
01左移1位11
01左移2位11
01規則: 將數值依次右移動若干位,如果超出界限,則去掉。
13 >> 2 == > 3過程8
421溢位省略位
溢位省略位
原始數110
1右移1位11
01右移2位11
01補充——原碼、反碼、補碼
原碼:乙個數的二進位制,其中最高位表示符號位:1為負數,0為正數。
反碼:在原碼的基礎上,除符號位外,依次取反。
補碼:在反碼的基礎上,按正常加法操作,加1。
說一說JS的IIFE
iife immediately invoked function expression,意為立即呼叫的函式表示式,也就是說,宣告函式的同時立即呼叫這個函式。對比一下,這是不採用iife時的函式宣告和函式呼叫 function foo foo 下面是iife形式的函式呼叫 functionfoo 函...
說一說JS的IIFE
iife immediately invoked function expression,意為立即呼叫的函式表示式,也就是說,宣告函式的同時立即呼叫這個函式。對比一下,這是不採用iife時的函式宣告和函式呼叫 function foo window console.log a 2 js的模組就是函式...
JS 位運算子
在js中有 等位運算子。在對乙個數值使用位運算子時,js會先將數值轉換為二進位制,然後進行位運算。在js中對乙個數值轉進行二進位制轉換,會得到乙個長度為32位的二進位制數,通常第乙個為1的位之前所有為0的為在表示時可以省略。常見位運算子使用方法有下列幾種 非,a 即 將a的二進位製碼的每一位 32位...