您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“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ò)程。
如何按位取反計(jì)算
按位取反的運(yùn)算規(guī)則步驟:
轉(zhuǎn)成二進(jìn)制原碼,最高位是符號(hào)位,0為正數(shù),1為負(fù)數(shù)
十進(jìn)制 ----> 原碼 1 ----> 00000001 -1 ----> 10000001
正數(shù)的反碼就是原碼,負(fù)數(shù)的反碼是符號(hào)位不變,其余位取反
十進(jìn)制 ----> 原碼 ----> 反碼 1 ----> 00000001 ----> 00000001 -1 ----> 10000001 ----> 11111110
正數(shù)的補(bǔ)碼還是原碼,負(fù)數(shù)的補(bǔ)碼是在反碼的基礎(chǔ)上加1
十進(jìn)制 ----> 原碼 ----> 反碼 ----> 補(bǔ)碼 1 ----> 00000001 ----> 00000001 ----> 00000001 -1 ----> 10000001 ----> 11111110 ----> 11111111
正整數(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
十進(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è)資訊頻道!
免責(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)容。