說一說JS中位運算子

2021-09-12 05:39:20 字數 1352 閱讀 9746

前言

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位...