按位非運算符


JS中的按位非運算符是~,作用是將每位二進制取反

十進制2的二進制表示為:

 0000,0010

每位都取反:

 1111,1101

這是內存中的保存形式。

我們讀取的十進制是根據原碼來讀取,而在內存中,數值都是以二進制補碼形式保存的。

正數的補碼和原碼一樣,負數的原碼轉補碼或者補碼轉原碼的規則:

符號位不變,將剩余位取反,得到反碼,在反碼的基礎上最后一位加一得到負數的補碼。

1111,1101輸出10進制的過程:

 1.符號位不變,剩余位取反

  1000,0010

 2.最后一位加1

  1000,0011

 3.得的結果1000,0011就是-3的原碼形式

~(1) = -2

~(2) = -3

~(3) = -4

~(2018) = -2019

假設A為正數,~(A)結果為B。B是A的每位去反的結果,包括符號位0也取反變成了1。那么B就被當做負數保存在內存中。顯示十進制數時,B除符號位外都取反,得到C,C和A的區別在於符號位不同,其他位都一樣,然后C的最后一位加1得到最終結果D。D和A相比,除符號位不同外,還大一。

假設A為負數,~(A)結果為B。B是A的每位取反的結果,符號位從1變成0。那么B被當做正數保存在內存中。A作為負數,在內存中保存的是補碼,假設A的原碼是C,補碼就是C除符號位,每位取反加一。B就是A的補碼包括符號位每位取反,不看符號位的變化的話,也就是C取反加一的基礎上再次取反,結果就是B比C少1。

~(0) = -1

~(-1) = 0

~(-2) = 1

~(-3) = 2

~(-4) = 3

 

~~3 = 3

~~ 5 = 5

 

記憶方法是~(A) = -(A+1)

 

負數原碼補碼轉換規則:

  符號位不動,從低位往高位數,遇到第一個1之前,包括第一個1不作任何取反,之后,每位都取反。這樣就避免了原碼轉反碼再轉補碼的繁瑣。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM