JavaScript?位運(yùn)算及實(shí)際應(yīng)用實(shí)例
位運(yùn)算基礎(chǔ)
位運(yùn)算時(shí)所有操作數(shù)均被視為 32 位補(bǔ)碼二進(jìn)制串,不足補(bǔ) 0,超出則丟棄最高有效位。運(yùn)算結(jié)果也按補(bǔ)碼反轉(zhuǎn)形式返回
&:位 AND。僅當(dāng)兩個(gè)操作數(shù)對(duì)應(yīng)位均為 1 時(shí),該位的結(jié)果值為 1。例如:
const a = 120; // 0b000...1111000 const b = 11; // 0b000...0001011 a & b; // 8 = 0b000...1000
&=:位 AND 賦值。兩個(gè)操作數(shù)做位 AND 運(yùn)算,并將結(jié)果賦值給第一個(gè)操作數(shù)
|:位 OR。只要兩個(gè)操作數(shù)對(duì)應(yīng)位的其中一個(gè)為 1,該位的結(jié)果值便為 1。例如:
const a = 5; // 0b000...0101 const b = 3; // 0b000...0011 a | b; // 7 = 0b000...0111
|=:位 OR 賦值。兩個(gè)操作數(shù)做位 OR 運(yùn)算,并將結(jié)果賦值給第一個(gè)操作數(shù)
^:位 XOR。當(dāng)兩個(gè)操作數(shù)對(duì)應(yīng)位中僅有一個(gè)為 1 時(shí),該位的結(jié)果值為 1。例如:
const a = 5; // 0b000...0101 const b = 3; // 0b000...0011 a ^ b; // 6 = 0b000...0110
^=:位 XOR 賦值。兩個(gè)操作數(shù)做位 XOR 運(yùn)算,并將結(jié)果賦值給第一個(gè)操作數(shù)~:位 NOT。將操作數(shù)按位取反。運(yùn)算結(jié)果滿足~x === -(x+1)
<<:左移位。將第一個(gè)操作數(shù)向左移動(dòng)指定位。左邊移出位被拋棄,右邊多出位由補(bǔ) 0。例如:
const a = 9; // 0b000...001001 const b = 2; a << b; // 36 = 0b000...100100
>>:帶符號(hào)右移位。將第一個(gè)操作數(shù)向右移動(dòng)指定位。右邊移出位被拋棄,左邊多出位由原先最左值補(bǔ)齊
const a = 36; // 0b000...100100 const b = 2; a >> b; // 9 = 0b000...001001
>>>:無(wú)符號(hào)右移位。將第一個(gè)操作數(shù)向右移動(dòng)指定位。右邊移出位被拋棄,左邊多出位由補(bǔ) 0
實(shí)際應(yīng)用
判斷整數(shù)是否為 2 的冪
function isPowerOfTwo(n) {
return n > 0 && ((n - 1) & n) === 0;
}判斷整數(shù)奇偶性
function isOdd(n) {
return (n & 1) === 1;
}標(biāo)志判斷
const canFly = 1 << 0; const canRun = 1 << 1; const canSwim = 1 << 2; const canJump = 1 << 3; let flags = 0; // 添加標(biāo)志 flags |= canFly; flags |= canJump; // 判斷標(biāo)志 !!(flags & canFly); // true !!(flags & canJump); // true // 清除標(biāo)志 flags &= ~canFly; !!(flags & canFly); // false
以上就是JavaScript 位運(yùn)算及實(shí)際應(yīng)用的詳細(xì)內(nèi)容,更多關(guān)于JavaScript 位運(yùn)算及實(shí)際應(yīng)用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
javascript實(shí)現(xiàn)簡(jiǎn)單的分頁(yè)特效
下面給大家匯總的幾個(gè)javascript實(shí)現(xiàn)的分頁(yè)代碼,當(dāng)然必須要結(jié)合后臺(tái)代碼實(shí)現(xiàn)。大家可以自行分析一下代碼,希望能夠給大家?guī)?lái)一定的幫助2015-08-08
使用Microsoft Ajax Minifier減小JavaScript文件大小的方法
大家用來(lái)減小JavaScript文件下載大小的常見(jiàn)的方式有2種: 壓縮(compression)和縮?。╩inification)。2010-04-04
js如何調(diào)用qq互聯(lián)api實(shí)現(xiàn)第三方登錄
這篇文章主要介紹了js如何調(diào)用qq互聯(lián)api實(shí)現(xiàn)第三方登錄,需要的朋友可以參考下2014-03-03
js定時(shí)器不準(zhǔn)確問(wèn)題的解決方法
本文主要介紹了js定時(shí)器不準(zhǔn)確問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
JS實(shí)現(xiàn)超簡(jiǎn)單的仿QQ折疊菜單效果
這篇文章主要介紹了JS實(shí)現(xiàn)超簡(jiǎn)單的仿QQ折疊菜單效果,可實(shí)現(xiàn)鼠標(biāo)滑過(guò)列表展開(kāi)的QQ折疊菜單效果,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2015-09-09
微信小程序?qū)崿F(xiàn)五星評(píng)價(jià)功能
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)五星評(píng)價(jià)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
簡(jiǎn)單實(shí)現(xiàn)JS對(duì)dom操作封裝
這篇文章主要介紹了簡(jiǎn)單實(shí)現(xiàn)JS對(duì)dom操作封裝,需要的朋友可以參考下2015-12-12
Javascript作用域(局部和全局作用域)詳細(xì)介紹
作用域是當(dāng)前的執(zhí)行上下文,值和表達(dá)式在其中“可見(jiàn)”或可被訪問(wèn),本文主要介紹了Javascript局部作用域和全局作用域,文中有詳細(xì)的代碼示例,具有一定的參考價(jià)值,需要的朋友可以借鑒一下2023-06-06

