溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Js移位操作及其應(yīng)用是怎樣的

發(fā)布時(shí)間:2021-11-11 09:45:01 來(lái)源:億速云 閱讀:141 作者:柒染 欄目:開(kāi)發(fā)技術(shù)

Js移位操作及其應(yīng)用是怎樣的,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

  我在看lodash實(shí)現(xiàn)一些工具函數(shù)的源碼時(shí)發(fā)現(xiàn)lodash定義了一些bitMask的常量。我一開(kāi)始沒(méi)弄明這是什么鬼東西,用Google搜了一圈才發(fā)現(xiàn)是我之前接觸過(guò)得位操作運(yùn)算一類(lèi)的東西。并且源碼和我搜索的資料給我提供了另一種使用場(chǎng)景,感覺(jué)應(yīng)用性還是蠻強(qiáng)的,所以干脆總結(jié)一下好了。

  什么是移位操作

  先以下面的表達(dá)式展開(kāi)需要了解的基礎(chǔ)知識(shí)。

  //lodash源碼里定義的常量

  varCLONE_DEEP_FLAG=1

  JavaScript遵循IEEE754標(biāo)準(zhǔn),無(wú)論是整數(shù)還是小數(shù)都是用雙精度浮點(diǎn)數(shù)表述,雙精度浮點(diǎn)數(shù)8個(gè)字節(jié),表示64位二進(jìn)制位,所以雙精度浮點(diǎn)數(shù)的表示范圍是-2^63~2^63-1。但是在進(jìn)行位操作時(shí)則是用的32位數(shù)表示,也就是4個(gè)字節(jié),表示范圍為`-2^31~2^31-1,其中無(wú)論是32位還是64位,最高位都是符號(hào)位,0表示正數(shù),1表示負(fù)數(shù)。

  上面的表達(dá)式在進(jìn)行位操作就會(huì)轉(zhuǎn)換成下面這種,如果超過(guò)32位了,那超過(guò)的部分就會(huì)全部省去。

  00000000000000000000000000000001

  移位操作符有哪些

  下面介紹幾種常用的操作符。

  &(位與)

  leta=1,

  b=2

  console.log(a&b)//0

  //0001

  //0010

  //=0000

  把變量a和變量b都展開(kāi)成32位二進(jìn)制數(shù),省去前面的0,a的二進(jìn)制表示為0001,b為0010,接著就是對(duì)應(yīng)位數(shù)的二進(jìn)制位比較,如果相同就是1,否則為0。

  |(位或)

  leta=1,

  b=2

  console.log(a|b)//3

  //0001

  //0010

  //=0011

  參照上面一種,不同的是相同的二進(jìn)制位上,只要有一個(gè)是1,則結(jié)果就是1,所以就是0011。

  ^(位異或)

  這個(gè)和|有點(diǎn)區(qū)別,相同的地方在于如果同一位數(shù)上的數(shù)只要一個(gè)是1,則這個(gè)位數(shù)的結(jié)果就是1,不同的地方在于相同的位數(shù)上如果數(shù)值相同,則結(jié)果為0.

  總之,移位操作給大家簡(jiǎn)單的介紹了一些,希望大家多看看。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

js
AI