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ù)對應(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ù)對應(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ù)對應(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ù)向左移動指定位。左邊移出位被拋棄,右邊多出位由補(bǔ) 0。例如:
const a = 9; // 0b000...001001 const b = 2; a << b; // 36 = 0b000...100100
>>
:帶符號右移位。將第一個(gè)操作數(shù)向右移動指定位。右邊移出位被拋棄,左邊多出位由原先最左值補(bǔ)齊
const a = 36; // 0b000...100100 const b = 2; a >> b; // 9 = 0b000...001001
>>>
:無符號右移位。將第一個(gè)操作數(shù)向右移動指定位。右邊移出位被拋棄,左邊多出位由補(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)用的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
微信小程序 wx:for遍歷循環(huán)使用實(shí)例解析
這篇文章主要介紹了微信小程序 wx:for遍歷循環(huán)使用實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09符合W3C Web標(biāo)準(zhǔn)的圖片連續(xù)無間隙水平滾動
很久以前就有這個(gè)問題,總是找不到通用的,或比較簡單的“圖片連續(xù)無間隙向左滾動,無間隙向右滾動,符合W3C Web標(biāo)準(zhǔn)”2008-06-06原生Javascript/原生JS修改CSS樣式的4種方式簡單示例
在網(wǎng)頁開發(fā)中我們經(jīng)常會用到JavaScript來操作網(wǎng)頁元素,其中一個(gè)常見的操作就是修改元素的CSS樣式,下面這篇文章主要給大家介紹了關(guān)于原生Javascript/原生JS修改CSS樣式的4種方式,需要的朋友可以參考下2024-03-03關(guān)于TypeScript開發(fā)的6六個(gè)實(shí)用小技巧分享
TypeScript是Javascrip t超集,支持靜態(tài)類型檢測,可以在編譯期提前暴露問題,節(jié)省debug時(shí)間,下面這篇文章主要給大家介紹了關(guān)于TypeScript開發(fā)的6六個(gè)實(shí)用小技巧,需要的朋友可以參考下2021-09-09純JavaScript代碼實(shí)現(xiàn)移動設(shè)備繪圖解鎖
為了個(gè)人信息的安全起見,移動設(shè)備上都有個(gè)繪圖解鎖,使用起來非常簡單,代碼是怎么實(shí)現(xiàn)的呢?下面小編給大家介紹js實(shí)現(xiàn)移動設(shè)備繪圖解鎖,需要的朋友可以參考下2015-10-10