深入了解JavaScript中的二進(jìn)制操作及位掩碼應(yīng)用
什么是二進(jìn)制?
二進(jìn)制數(shù)由0和1組成,這是計(jì)算機(jī)使用的基礎(chǔ)數(shù)字系統(tǒng)。二進(jìn)制可以表示每個(gè)數(shù)字,與十進(jìn)制相似。例如:10 的二進(jìn)制表示為 1010
。十進(jìn)制和二進(jìn)制之間的轉(zhuǎn)換可以通過(guò)數(shù)學(xué)方法進(jìn)行。例如,將十進(jìn)制數(shù)字20轉(zhuǎn)換為二進(jìn)制:
20 / 2 = 10/余數(shù)0
10 / 2 = 5/余數(shù)0
5 / 2 = 2/余數(shù)1
2 / 2 = 1/余數(shù)0
1 / 2 = 0/余數(shù)1
所以,20的二進(jìn)制表示為 10100
。
二進(jìn)制運(yùn)算符
JavaScript 提供了許多二進(jìn)制運(yùn)算符,它們可以用于 JavaScript 中的數(shù)字?jǐn)?shù)據(jù)類(lèi)型。以下是一些最常用的運(yùn)算符:
按位 AND(&)
按位AND運(yùn)算符用符號(hào) &
表示,它在兩個(gè)數(shù)字的二進(jìn)制位上執(zhí)行邏輯AND操作,并返回一個(gè)新的位模式。例如:
console.log(5 & 9); // 輸出1
在這個(gè)例子中,數(shù)字 5
的二進(jìn)制表示為 101
,而數(shù)字 9
的二進(jìn)制表示為 1001
。執(zhí)行按位AND操作后,我們得到的結(jié)果是 1
。
按位 OR(|)
按位OR運(yùn)算符用符號(hào) |
表示,它在兩個(gè)數(shù)字的二進(jìn)制位上執(zhí)行邏輯OR操作,并返回一個(gè)新的位模式。例如:
console.log(5 | 9); // 輸出13
在這個(gè)例子中,數(shù)字 5
的二進(jìn)制表示為 101
,而數(shù)字 9
的二進(jìn)制表示為 1001
。執(zhí)行按位OR操作后,我們得到的結(jié)果是 1101
。
按位 XOR(^)
按位XOR運(yùn)算符用符號(hào) ^
表示,它在兩個(gè)數(shù)字的二進(jìn)制位上執(zhí)行邏輯異或操作,并返回一個(gè)新的位模式。例如:
console.log(5 ^ 9); // 輸出12
在這個(gè)例子中,數(shù)字 5
的二進(jìn)制表示為 101
,而數(shù)字 9
的二進(jìn)制表示為 1001
。執(zhí)行按位XOR操作后,我們得到的結(jié)果是 1100
。
按位 NOT(~)
按位NOT運(yùn)算符用符號(hào) ~
表示,它對(duì)其操作數(shù)進(jìn)行逐位取反,并返回一個(gè)新的位模式。例如:
console.log(~5); // 輸出-6
在這個(gè)例子中,數(shù)字 5
的二進(jìn)制表示為 101
。執(zhí)行按位NOT操作后,我們得到的結(jié)果是 -6
。
左移(<<)
左移運(yùn)算符用符號(hào) <<
表示,它將其第一個(gè)操作數(shù)向左移動(dòng)指定的位數(shù),并使用零填充右側(cè)的空位。例如:
console.log(5 << 2); // 輸出20
在這個(gè)例子中,數(shù)字 5
的二進(jìn)制表示為 101
。執(zhí)行左移操作后,我們得到的結(jié)果是 10100
,即十進(jìn)制數(shù) 20
。
右移(>>)
右移運(yùn)算符用符號(hào) >>
表示,它將其第一個(gè)操作數(shù)向右移動(dòng)指定的位數(shù),并使用符號(hào)位填充左側(cè)的空位。例如:
console.log(10 >> 1); // 輸出5
在這個(gè)例子中,數(shù)字 10
的二進(jìn)制表示為 1010
。執(zhí)行右移操作后,我們得到的結(jié)果是 101
,即十進(jìn)制數(shù) 5
。
位運(yùn)算賦值
除了上述基本位運(yùn)算符之外,JavaScript還提供了一些位運(yùn)算賦值操作符,用于對(duì)變量或表達(dá)式進(jìn)行位運(yùn)算并將結(jié)果保存回同一個(gè)變量中。以下是最常見(jiàn)的位運(yùn)算賦值操作符:
&=
按位AND賦值運(yùn)算符用符號(hào) &=
表示,它將其左側(cè)的操作數(shù)與右側(cè)的操作數(shù)進(jìn)行邏輯AND操作,并將結(jié)果保存回左側(cè)的操作數(shù)中。例如:
let a = 5; a &= 9; console.log(a); // 輸出1
在這個(gè)例子中,變量 a
初始值為 5
,即二進(jìn)制 101
。執(zhí)行按位AND賦值操作后,我們得到的結(jié)果是 1
,因?yàn)?101 & 1001
等于 1
。
|=
按位OR賦值運(yùn)算符用符號(hào) |=
表示,它將其左側(cè)的操作數(shù)與右側(cè)的操作數(shù)進(jìn)行邏輯OR操作,并將結(jié)果保存回左側(cè)的操作數(shù)中。例如
let a = 5; a |= 9; console.log(a); // 輸出13
在這個(gè)例子中,變量 a
初始值為 5
,即二進(jìn)制 101
。執(zhí)行按位OR賦值操作后,我們得到的結(jié)果是 1101
,因?yàn)?101 | 1001
等于 1101
。
^=
按位XOR賦值運(yùn)算符用符號(hào) ^=
表示,它將其左側(cè)的操作數(shù)與右側(cè)的操作數(shù)進(jìn)行邏輯異或操作,并將結(jié)果保存回左側(cè)的操作數(shù)中。例如:
let a = 5; a ^= 9; console.log(a); // 輸出12
在這個(gè)例子中,變量 a
初始值為 5
,即二進(jìn)制 101
。執(zhí)行按位XOR賦值操作后,我們得到的結(jié)果是 1100
,因?yàn)?101 ^ 1001
等于 1100
。
<<=
左移賦值運(yùn)算符用符號(hào) <<=
表示,它將其左側(cè)的操作數(shù)向左移動(dòng)指定的位數(shù),并使用零填充右側(cè)的空位,并將結(jié)果保存回左側(cè)的操作數(shù)中。例如:
let a = 5; a <<= 2; console.log(a); // 輸出20
在這個(gè)例子中,變量 a
初始值為 5
,即二進(jìn)制 101
。執(zhí)行左移賦值操作后,我們得到的結(jié)果是 10100
,即十進(jìn)制數(shù) 20
。
>>=
右移賦值運(yùn)算符用符號(hào) >>=
表示,它將其左側(cè)的操作數(shù)向右移動(dòng)指定的位數(shù),并使用符號(hào)位填充左側(cè)的空位,并將結(jié)果保存回左側(cè)的操作數(shù)中。例如:
let a = 10; a >>= 1; console.log(a); // 輸出5
在這個(gè)例子中,變量 a
初始值為 10
,即二進(jìn)制 1010
。執(zhí)行右移賦值操作后,我們得到的結(jié)果是 101
,即十進(jìn)制數(shù) 5
。
使用位運(yùn)算進(jìn)行位掩碼
位掩碼是一種通過(guò)使用按位運(yùn)算符來(lái)設(shè)置或清除二進(jìn)制位的技術(shù)。在JavaScript中,可以將位掩碼用于各種目的,例如:
- 布爾值:使用一個(gè)位表示 true 和 false。
- 權(quán)限:使用幾個(gè)位來(lái)表示不同類(lèi)型的權(quán)限。
- 顏色:使用三個(gè)字節(jié)(24位)來(lái)表示紅、綠和藍(lán)的值。
下面是一個(gè)示例,展示如何使用位掩碼從一個(gè)字節(jié)中提取兩個(gè)不同的值:
const byte = 0b10110110; const mask1 = 0b11110000; const mask2 = 0b00001111; const value1 = (byte & mask1) >> 4; // 提取高4位并右移4位 const value2 = byte & mask2; // 提取低4位 console.log(value1, value2); // 輸出 11 6
在這個(gè)例子中,我們首先定義了一個(gè)字節(jié) 0b10110110
。然后我們定義了兩個(gè)掩碼:mask1
只保留字節(jié)的高4位(即前四位),而 mask2
只保留字節(jié)的低4位(即后四位)。我們?nèi)缓笫褂冒次籄ND運(yùn)算符將每個(gè)掩碼應(yīng)用于字節(jié)。對(duì)于 value1
,我們將結(jié)果向右移動(dòng)4位以獲取正確的值。最后,我們輸出 value1
和 value2
的值,它們分別為 11
和 6
。
結(jié)論
JavaScript中的二進(jìn)制操作可以幫助您更好地處理數(shù)字和位掩碼。本文介紹了一些基本的二進(jìn)制運(yùn)算符和位運(yùn)算賦值操作符,并展示了如何使用位掩碼從一個(gè)字節(jié)中提取多個(gè)值。雖然這些技術(shù)可能不會(huì)在您的日常編程中經(jīng)常使用,但當(dāng)您需要進(jìn)行二進(jìn)制操作時(shí),它們可能會(huì)非常有用。
以上就是深入了解JavaScript中的二進(jìn)制操作及位掩碼應(yīng)用的詳細(xì)內(nèi)容,更多關(guān)于JavaScript二進(jìn)制及位掩碼的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- php和js實(shí)現(xiàn)根據(jù)子網(wǎng)掩碼和ip計(jì)算子網(wǎng)功能示例
- JS 根據(jù)子網(wǎng)掩碼,網(wǎng)關(guān)計(jì)算出所有IP地址范圍示例
- js針對(duì)ip地址、子網(wǎng)掩碼、網(wǎng)關(guān)的邏輯性判斷
- JS驗(yàn)證IP,子網(wǎng)掩碼,網(wǎng)關(guān)和MAC的方法
- js驗(yàn)證IP及子網(wǎng)掩碼的合法性有效性示例
- JavaScript在ASP頁(yè)面中實(shí)現(xiàn)掩碼文本框效果代碼
- 使用 JavaScript 在沒(méi)有插件的情況下輸入文本掩碼的示例詳解
相關(guān)文章
Js Jquery創(chuàng)建一個(gè)彈出層可加載一個(gè)頁(yè)面
Js Jquery創(chuàng)建一個(gè)彈出層,當(dāng)加載一個(gè)頁(yè)面進(jìn)彈出層時(shí)出現(xiàn)亂碼,示例代碼如下,大家可以參考參考2014-05-05javascript中的有名函數(shù)和無(wú)名函數(shù)
javascript中的有名函數(shù)和無(wú)名函數(shù)...2007-10-10細(xì)數(shù)localStorage的用法及使用注意事項(xiàng)
這篇文章主要介紹了細(xì)數(shù)localStorage的用法及使用注意事項(xiàng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04詳解babel是如何將class語(yǔ)法糖轉(zhuǎn)換為es5的語(yǔ)法
這篇文章主要詳細(xì)介紹了babel是如何將class語(yǔ)法糖轉(zhuǎn)換為es5的語(yǔ)法,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-02-02解決JSON.stringify()自動(dòng)將中文轉(zhuǎn)譯成unicode的問(wèn)題
下面小編就為大家分享一篇解決JSON.stringify()自動(dòng)將中文轉(zhuǎn)譯成unicode的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01