溫馨提示×

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

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

javascript如何進(jìn)行按位求反

發(fā)布時(shí)間:2021-12-07 12:38:10 來(lái)源:億速云 閱讀:178 作者:小新 欄目:web開(kāi)發(fā)

這篇文章主要為大家展示了“javascript如何進(jìn)行按位求反”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“javascript如何進(jìn)行按位求反”這篇文章吧。

在javascript中,可以利用“~”操作符來(lái)實(shí)現(xiàn)按位求反,語(yǔ)法“~ 運(yùn)算數(shù)”;“~”操作符可以將指定運(yùn)算數(shù)轉(zhuǎn)為二進(jìn)制整數(shù)形式,并對(duì)該二進(jìn)制操作數(shù)逐位進(jìn)行取反操作。

本教程操作環(huán)境:windows7系統(tǒng)、javascript1.8.5版、Dell G3電腦。

在javascript中,可以利用“~”操作符來(lái)實(shí)現(xiàn)按位求反。如~1 = -2,~-3=2,~true=-2,~false=-1

“~”操作符可以查看指定值的二進(jìn)制表示形式,并對(duì)該二進(jìn)制操作數(shù)逐位進(jìn)行取反操作

  • 第 1 步:把運(yùn)算數(shù)轉(zhuǎn)換為 32 位的二進(jìn)制整數(shù)。

  • 第 2 步:逐位進(jìn)行取反操作。

  • 第 3 步:把二進(jìn)制反碼轉(zhuǎn)換為十進(jìn)制浮點(diǎn)數(shù)。

對(duì) 12 進(jìn)行位非運(yùn)算,則返回值為 -13。

console.log( ~ 12 );  //返回值-13

下圖以算式的形式解析了對(duì) 12 進(jìn)行位非運(yùn)算的過(guò)程。

javascript如何進(jìn)行按位求反

如何按位取反計(jì)算

  按位取反的運(yùn)算規(guī)則步驟:

  1、十進(jìn)制轉(zhuǎn)成原碼

  轉(zhuǎn)成二進(jìn)制原碼,最高位是符號(hào)位,0為正數(shù),1為負(fù)數(shù)

    十進(jìn)制   ---->  原碼
      1   ---->  00000001
     -1   ---->  10000001
  2、原碼轉(zhuǎn)成反碼

  正數(shù)的反碼就是原碼,負(fù)數(shù)的反碼是符號(hào)位不變,其余位取反

    十進(jìn)制  ---->   原碼    ---->  反碼
      1    ----> 00000001 ----> 00000001
     -1    ----> 10000001 ----> 11111110
  3、反碼轉(zhuǎn)成補(bǔ)碼

  正數(shù)的補(bǔ)碼還是原碼,負(fù)數(shù)的補(bǔ)碼是在反碼的基礎(chǔ)上加1

    十進(jìn)制  ---->    原碼   ---->   反碼   ---->  補(bǔ)碼
      1    ----> 00000001 ----> 00000001 ----> 00000001
     -1    ----> 10000001 ----> 11111110 ----> 11111111
  4、補(bǔ)碼取反得原碼

  正整數(shù)補(bǔ)碼取反之后符號(hào)位置為1,是一個(gè)負(fù)整數(shù),所以再按照負(fù)整數(shù)計(jì)算補(bǔ)碼的方式逆運(yùn)算得到原碼

  逆運(yùn)算得到原碼,首先將取反的補(bǔ)碼轉(zhuǎn)成反碼,公式:反碼=補(bǔ)碼 - 1,然后將反碼轉(zhuǎn)成原碼,符號(hào)位不變,其他位取反

  十進(jìn)制  ---->    原碼    ---->   反碼    ---->   補(bǔ)碼     ---->  補(bǔ)碼取反   ---->  取反補(bǔ)碼轉(zhuǎn)成反碼  ---->  轉(zhuǎn)成原碼
    1   ----> 00000001  ----> 0000001  ---->  00000001  ----> 11111110   ---->   11111101    ---->  10000010

  負(fù)整數(shù)補(bǔ)碼取反之后符號(hào)位置為0,是一個(gè)正整數(shù),因正整數(shù)的反碼與補(bǔ)碼就是本身,所以不需要再進(jìn)行逆運(yùn)算

  十進(jìn)制  ---->    原碼    ---->   反碼     ---->   補(bǔ)碼      ---->   補(bǔ)碼取反得原碼  
    -1  ---->  10000001  ----> 11111110  ---->  11111111   ---->     00000000    
  5、將原碼轉(zhuǎn)成二進(jìn)制
 十進(jìn)制  ---->    原碼    ---->   反碼    ---->   補(bǔ)碼     ---->  補(bǔ)碼取反   ---->  取反補(bǔ)碼轉(zhuǎn)成反碼  ---->  轉(zhuǎn)成原碼  ---->  轉(zhuǎn)成二進(jìn)制
    1   ----> 00000001  ----> 0000001  ---->  00000001  ----> 11111110   ---->   11111101    ---->  10000010 ---->   -2
  十進(jìn)制  ---->    原碼    ---->   反碼     ---->   補(bǔ)碼      ---->   補(bǔ)碼取反得原碼   ---->  轉(zhuǎn)成二進(jìn)制
    -1  ---->  10000001  ----> 11111110  ---->  11111111   ---->    00000000     ---->     0

  所以,~1=-2,~-1=0

取反再取反~~的作用

  操作符~, 是按位取反的意思,表面上~~(取反再取反)沒(méi)有意義,實(shí)際上在JS中可以將浮點(diǎn)數(shù)變成整數(shù)。

 console.log(~~1.11);          //1
 console.log(~~-25.11);       //-25

以上是“javascript如何進(jìn)行按位求反”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

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

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎ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)容。

AI