JavaScript是一門流行的編程語言,可以在網頁上創建動態和交互式的頁面、應用程序和游戲。它支持各種算術運算符和邏輯運算符,其中位運算符是一類特殊的運算符,用于基于二進制數字執行運算。在本文中,我們將深入了解位運算符及其實際用途。
首先,了解一些數字系統的基礎知識是十分有必要的:JavaScript內部的所有數字都以二進制形式存儲,這意味著它們由二進制位0和1組成。例如,數字5可以表示為二進制數101,數字10可以表示為二進制數1010。編寫有效的位運算代碼需要對二進制數字系統有基本的了解。
接下來,我們來看一些位運算符的例子:
//按位“與”運算 let result = 5 & 10; // 輸出0,因為5和10的二進制形式都沒有重疊的1 //按位“或”運算 let result = 5 | 10; // 輸出15,因為5和10的二進制形式中都有1,這個結果的二進制形式為1111,即十進制15 //按位“異或”運算 let result = 5 ^ 10; // 輸出15,因為二者的二進制形式中,僅有101和1010是不同的,這種情況下按位“異或”運算的結果為1111,即十進制15 //按位“非”運算 let result = ~5; // 輸出-6,因為5的二進制形式為101,按位“非”運算結果為010,再將其轉換為十進制,即2的平方 //左移運算 let result = 5<<2; // 輸出20,因為二進制數101左移2位,新增的2個二進制位都是0,結果為10100,即十進制20 //右移運算 let result = 10>>1; // 輸出5,因為二進制數1010右移1位,結果為101,即十進制5 //無符號右移運算 let result = -10>>>1; // 輸出2147483643,因為將-10轉換為32位二進制補碼形式(以符號位0表示正數),即11111111111111111111111111110110,右移1位,將新增的32位都填充為0,得到00111111111111111111111111111011,即十進制2147483643
在上面的代碼片段中,我們看到了六種不同的位運算符。下面我們來詳細介紹它們。
按位“與”運算符(&)執行的是將兩個數的每一個二進制位進行比較,如果兩個數位上都為1,那么結果二進制數的這一位也為1,否則為0。下面是一個例子:
let a = 5; // 二進制表示為101 let b = 10; // 二進制表示為1010 let result = a & b; // 二進制為0000,即十進制的0
按位“或”運算符(|)執行的是將兩個數的每一個二進制位進行比較,如果其中一個數位上為1,那么結果二進制數的這一位也為1,否則為0。下面是一個例子:
let a = 5; // 二進制表示為101 let b = 10; // 二進制表示為1010 let result = a | b; // 二進制為1111,即十進制的15
按位“異或”運算符(^)執行的是將兩個數的每一個二進制位進行比較,只有其中一個數位上為1而另一個數為0時,結果二進制數的這一位才為1,否則為0。下面是一個例子:
let a = 5; // 二進制表示為101 let b = 10; // 二進制表示為1010 let result = a ^ b; // 二進制為1111,即十進制的15
按位“非”運算符(~)執行的是將一個數的所有二進制位取反(0變成1,1變成0),并轉換為十進制結果。下面是一個例子:
let a = 5; // 二進制表示為101 let result = ~a; // 二進制為010,即十進制的2次方
左移運算符(<<)執行的是將一個數的所有二進制位向左移動位數個位置,并在最低位處填充0。下面是一個例子:
let a = 5; // 二進制表示為101 let result = a<<2; // 二進制表示為10100,即十進制的20
右移運算符(>>)執行的是將一個數的所有二進制位向右移動位數個位置,并在最高位處填充符號位(正數為0,負數為1)。下面是一個例子:
let a = 10; // 二進制表示為1010 let result = a>>1; // 二進制表示為101,即十進制的5
無符號右移運算符(>>>)執行的是將一個數的所有二進制位向右移動位數個位置,并在最高位處填充0。下面是一個例子:
let a = -10; // 二進制表示為11111111111111111111111111110110 let result = a>>>1; // 二進制表示為01111111111111111111111111111011,即十進制的2147483643
總之,位運算符是一類特殊的運算符,用于基于二進制數字執行運算,在一些特殊情況下使用很方便。了解這些運算符的行為和實際用途是編寫高效JavaScript代碼的關鍵,徹底掌握它們可以有助于加速您的代碼。