JavaScript - 位元運算符

各位未來的編程大師,大家好!今天,我們將要一起深入探索JavaScript位元運算符的迷人世界。我知道你現在在想什麼:"位元運算什麼?" 不用擔心!在這堂課結束之前,你將會像專家一樣操縱位元。所以,讓我們一起踏上這個二進制的冒險之旅吧!

JavaScript - Bitwise Operators

JavaScript 位元運算符

位元運算是JavaScript中特殊的工具,讓我們能在二進制層面上與數字一起工作。這意味著我們將會處理1和0,就像計算機內部所做的一樣。這可能聽起來有點令人卻步,但相信我,一旦你掌握了要領,其實非常有趣!

在我們進入具體內容之前,讓我們先來看一下我們將會介紹的所有位元運算符:

運算符 名稱 說明
& AND 如果兩個位元都是1,則將每個位元設為1
| OR 如果兩個位元中的任意一個是1,則將每個位元設為1
^ XOR 如果只有兩個位元中的一個是1,則將每個位元設為1
~ NOT 翻轉所有位元
<< 左移 向左移動,並從右側填入0
>> 右移 向右移動,並從左側複製最左邊的位元
>>> 零填充右移 向右移動,並從左側填入0

現在,讓我們一一來解析這些運算符!

JavaScript 位元AND (&) 運算符

位元AND運算符就像一個非常嚴格的俱樂部門衛。只有當兩個輸入都是1時,它才讓1通過。否則,就是0。讓我們看看它是如何工作的:

let a = 5;  // 二進制為 0101
let b = 3;  // 二進制為 0011
console.log(a & b);  // 二進制為 0001,即十進制的 1

在這個例子中,我們正在比較5(0101)和3(0011)的每一位。只有在最右邊的位是1的情況下,這兩個數字中才會有1通過。結果是0001,即十進制的1。

JavaScript 位元OR (|) 運算符

位元OR運算符就像一個更為寬容的保鏢。如果任一輸入是1,它就讓它通過。讓我們看看它是如何工作的:

let a = 5;  // 二進制為 0101
let b = 3;  // 二進制為 0011
console.log(a | b);  // 二進制為 0111,即十進制的 7

在這裡,我們得到1的位置是5或3中的任意一個有1的地方,結果是0111,即十進制的7。

JavaScript 位元XOR (^) 運算符

XOR運算符就像一個奇怪的派對遊戲,只有當你戴帽子或圍巾(但不能同時戴)時才讓你進入!它只在位元不同的情況下返回1。看看這個:

let a = 5;  // 二進制為 0101
let b = 3;  // 二進制為 0011
console.log(a ^ b);  // 二進制為 0110,即十進制的 6

我們在位元不同的地方(從右數第二和第三位)得到1,結果是0110,即十進制的6。

JavaScript 位元NOT (~) 運算符

NOT運算符就像對立日一樣,它會翻轉所有的位元。但有一個陷阱!在JavaScript中,它還會反轉符號並減去1。讓我們看看:

let a = 5;  // 二進制為 0101
console.log(~a);  // 十進制的 -6

結果可能會讓你感到驚訝!這是因為JavaScript使用二進制的補碼來表示負數。所以~5實際上是-6。

位元左移 (<<) 運算符

左移運算符就像一個傳送帶,將位元向左移動,並在右側添加0。每次移動都會使數字翻倍:

let a = 5;  // 二進制為 0101
console.log(a << 1);  // 二進制為 1010,即十進制的 10
console.log(a << 2);  // 二進制為 10100,即十進制的 20

看見了嗎?5經過一次移動變成了10,兩次移動變成了20?就像魔法一樣!

位元右移 (>>) 運算符

右移運算符則相反,將位元向右移動。它有效地將數字減半(向下取整):

let a = 5;  // 二進制為 0101
console.log(a >> 1);  // 二進制為 0010,即十進制的 2

5除以2是2.5,但我們向下取整到2。

位元右移並填充零 (>>>) 運算符

這個運算符與>>相似,但它總是從左側填充0,即使對負數也是如此:

let a = -5;  // 二進制為 11111111111111111111111111111011 (32位)
console.log(a >>> 1);  // 二進制為 01111111111111111111111111111101,即十進制的 2147483645

這個有點複雜!它主要用於當你需要將數字當作無符號數字處理時。

好了,各位!你們已經開始踏上了位元操作的旅程。這些運算符現在可能看起來有點抽象,但它們在處理二進制數據、創建散列函數或優化某些算法等任務中非常有用。

記住,熟能生巧。嘗試玩轉這些運算符,很快你就能像專家一樣輕鬆應對位元!快樂編程,願位元與你同在!

Credits: Image by storyset