在javascript中,可以利用「~」運算子來實現位元求反,語法「~ 運算數」;「~」運算子可以將指定運算數轉為二進位整數形式,並對該二進位操作數逐位進行取反操作。
本教學操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。
在javascript中,可以利用「~」運算子來實現位元求反。如~1 = -2,~-3=2,~true=-2,~false=-1
「~」運算子可以查看指定值的二進位表示形式,並對該二進位運算元逐位進行取反操作
第1 步:把運算數轉換為32 位元的二進位整數。
第 2 步:逐位進行取反操作。
第 3 步:把二進位反碼轉換成十進位浮點數。
對 12 進行位元非運算,則傳回值為 -13。
console.log( ~ 12 ); //返回值-13
下圖以算式的形式解析了對 12 進行位非運算的過程。
如何以位元取反計算
位元取反的運算規則步驟:
轉成二進位原碼,最高位是符號位,0為正數,1為負數
十进制 ----> 原码 1 ----> 00000001 -1 ----> 10000001
正數的反碼就是原碼,負數的反碼是符號位不變,其餘位取反
十进制 ----> 原码 ----> 反码 1 ----> 00000001 ----> 00000001 -1 ----> 10000001 ----> 11111110
正數的補碼還是原碼,負數的補碼是在反碼的基礎上加1
十进制 ----> 原码 ----> 反码 ----> 补码 1 ----> 00000001 ----> 00000001 ----> 00000001 -1 ----> 10000001 ----> 11111110 ----> 11111111
正整數補碼取反之後符號位置為1,是一個負整數,所以再按照負整數計算補碼的方式逆運算得到原碼
逆運算得到原碼,首先將取反的補碼轉成反碼,公式:反碼=補碼- 1,然後將反碼轉成原碼,符號位不變,其他位取反
十进制 ----> 原码 ----> 反码 ----> 补码 ----> 补码取反 ----> 取反补码转成反码 ----> 转成原码 1 ----> 00000001 ----> 0000001 ----> 00000001 ----> 11111110 ----> 11111101 ----> 10000010
負整數補碼取反之後符號位置為0,是一個正整數,因正整數的反碼與補碼就是本身,所以不需要再進行逆運算
十进制 ----> 原码 ----> 反码 ----> 补码 ----> 补码取反得原码 -1 ----> 10000001 ----> 11111110 ----> 11111111 ----> 00000000
十进制 ----> 原码 ----> 反码 ----> 补码 ----> 补码取反 ----> 取反补码转成反码 ----> 转成原码 ----> 转成二进制 1 ----> 00000001 ----> 0000001 ----> 00000001 ----> 11111110 ----> 11111101 ----> 10000010 ----> -2
十进制 ----> 原码 ----> 反码 ----> 补码 ----> 补码取反得原码 ----> 转成二进制 -1 ----> 10000001 ----> 11111110 ----> 11111111 ----> 00000000 ----> 0
所以,~1=-2,~-1=0
取反再取反~~的作用
運算子~, 是位元取反的意思,表面上~~(取反再取反)沒有意義,實際上在JS中可以將浮點數變成整數。
console.log(~~1.11); //1 console.log(~~-25.11); //-25
【相關推薦:javascript學習教學】
#以上是javascript怎麼進行位元求反的詳細內容。更多資訊請關注PHP中文網其他相關文章!