java反码_Java:二进制(原码、反码、补码)与位运算
一、二進制(原碼、反碼、補碼)
二進制的最高位是符號位(“0”代表正數,“1”代表負數);
Java中沒有無符號數;
計算機以整數的補碼進行運算;
1.? 原碼:將一個整數轉換成二進制表示
以 int 類型為例,int類型占4個字節、共32位。
例如,2 的原碼為:00000000 00000000 00000000 00000010
-2的原碼為:10000000 00000000 00000000 00000010
2. 反碼
正數的反碼:與原碼相同
負數的反碼:原碼的符號位不變,其他位取反
例如,-2 的反碼為:11111111 11111111 11111111 11111101
3. 補碼
正數的補碼:與原碼相同
負數的補碼:反碼+1
例如,-2 的補碼為:01111111 11111111 11111111 11111110
二、位運算
Java中有4個位運算符:
1. 按位與 &:兩位都為1,結果為1
例如,2&3 = 2
2? 的原碼為: 00000000 00000000 00000000 00000010
3? 的原碼為: 00000000 00000000 00000000 00000011
2&3 原碼為: 00000000 00000000 00000000 00000010 = 2
2. 按位或 |:至少一位為1,結果為1
例如,2|3 = 3
2? 的原碼為: 00000000 00000000 00000000 00000010
3? 的原碼為: 00000000 00000000 00000000 00000011
2|3? ?原碼為: 00000000 00000000 00000000 00000011 = 3
3. 按位異或 ^:兩位一個為1、一個為0,結果為1
例如,2|3 = 3
2? 的原碼為: 00000000 00000000 00000000 00000010
3? 的原碼為: 00000000 00000000 00000000 00000011
2^3 原碼為: 00000000 00000000 00000000 00000001 = 1
4. 按位取反 ~:0變成1、1變成0
例如,~2 = -3
對2的原碼取反:11111111 11111111 11111111 11111101? (取反后結果的補碼,也就是-3的補碼。我們需要從補碼推出原碼,才能得到-3)
轉換成反碼:? ? 11111111 11111111 11111111 11111100 (補碼減1)
轉換成原碼:? ? 10000000 00000000 00000000 00000011 =-3 (符號為不變,其他位取反)
總結
正數的原碼、反碼、補碼都一樣;
負數的反碼 = 原碼的符號位不變,其他位取反;
負數的補碼 = 反碼+1;
0的原碼、反碼、補碼都是0;
計算機以補碼進行運算;
取反不同于反碼;
2018-01-06?18:38:29
總結
以上是生活随笔為你收集整理的java反码_Java:二进制(原码、反码、补码)与位运算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux脚本vrrp_script,k
- 下一篇: Java自动切表_java_Mybati