~ 非運算操作


java ~ 非運算操作

看源碼ThreadPoolExecutor 源碼時,看到了這么一段

~ 非運算符自己編程的時候用的比較少,於是就驗證了一下這個運算符。


//https://blog.csdn.net/wenxinwukui234/article/details/42119265   關於補碼,我的總結是:  補碼巧妙的運用了“進位丟失” 使得補碼運算滿足  -x + x  = 0 ,這樣計算機可以只進行加法運算 不用額外引入減法邏輯,提高運算效率。
public static void main(String[] args) {
    System.out.println(~(-6) );// ~ 非運算后的 結果 5
    System.out.println(~(0) );//-1
    System.out.println(~(3) );//-4

    // 將數字轉換成二進制表示,計算機表示二進制數字 使用的是補碼。
    // 正數的補碼就是原碼。  對於負數:   補碼 = 原碼除了符號位之外 各位取反 + 1   .  原碼 = 補碼除了符號位之外 各位取反 + 1
    System.out.println( Integer.toBinaryString(-6)); // 打印的值,即-6的補碼      11111111111111111111111111111010
    System.out.println(Integer.toBinaryString(0)); // 0
    System.out.println(Integer.toBinaryString(3));//11


}

//對  11111111111111111111111111111010   各位取反  得到 00000000000000000000000000000101   既可得到 5 的補碼 。(也是5原碼)
//對  0 各位取反 得到     11111111111111111111111111111111  是一個補碼 , 然后除了符號位 各位取反后+1 得到 10000000000000000000000000000001   (即是 -1的原碼)
// 對 00000000000000000000000000000011 各位取反得到 11111111111111111111111111111100    取反+1 得到    10000000000000000000000000000100 (即-4 的原碼)  
// 總結:  ~  非運算 ,即對 一個數字的二進制(計算機用補碼表示數字)  進行各位取反。   最終這個獲取的值表示哪一個數字 則需要對結果再求其相應的原碼 才能看出來。


免責聲明!

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



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