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 的原碼)
// 總結: ~ 非運算 ,即對 一個數字的二進制(計算機用補碼表示數字) 進行各位取反。 最終這個獲取的值表示哪一個數字 則需要對結果再求其相應的原碼 才能看出來。
