1. Java中的位运算符
(1) 与&:
对运算符两侧以二进制表达的操作符按位分别进行'与'运算。
操作的规则是:仅当两个操作数都为1时。输出结果才为1。否则为0
例:12 & 5 = 1100 & 0101 = 0100 = 4
(2) 或|
对运算符两側以二进制表达的操作符按位分别进行'或'运算。
操作的规则是:仅当两个操作数都为0时,输出的结果才为0。
例:12 | 5 = 1100 | 0101 = 1101 = 13
(3) 异或^
对运算符两側以二进制表达的操作数按位分别进行'异或'运算。
异或运算操作的规则是:仅当两个操作数不同一时候。对应的输出结果才为1,否则为0
例:12 ^ 5 = 1100 ^ 0101 = 1001 = 9
(4) 取反~
'取反'运算符~的作用是将各位数字取反:全部的0置为1,1置为0
例:~12 = ~1100 = 0011 = 3 错
12 的二进制为 1100
进行取反操作为 10000000 00000000 00000000 00001101
则完整的运算式为 ~12 = -13
(5) 左移<<
左移就是把一个数的全部位数都向左移动若干位
例:12 << 1 = 1100 << 1 = 11000 = 24
(6) 右移>>
右移就是把一个数的全部位数都向右移动若干位
(7) 无符号右移>>>
无符号右移一位。不足的补0
2. Java运算符优先级
- 单目: +(正数) , -(负数), ++, -- 等
- 乘除: *, /, %, +, -
- 位: <<, >>, >>>
- 关系: >, >=, <, <=, ==, !=
- 逻辑: &&, ||, &, |, ^
- 三目: A > B ? X : Y
- 最后复制: =
运算符优先级口诀如下:单目乘除位关系,逻辑三目后赋值。
3. 测试代码
public class BitOperation { public static void main(String[] args) { System.out.println("&位运算符:12 & 5 = " + (12 & 5)); System.out.println("|位运算符:12 | 5 = " + (12 | 5)); System.out.println("^位运算符:12 ^ 5 = " + (12 ^ 5)); System.out.println("~位运算符:~12 = " + (~12)); System.out.println("<<位运算符:12 << 1 = " + (12 << 1)); System.out.println(">>位运算符:12 >> 1 = " + (12 >> 5)); System.out.println(">>>位运算符:12 >>> 1 = " + (12 >>> 5)); int[] elements = {1,2,3,4,5,6,7}; int newLength = elements.length * 3 >>> 1 + 1; System.out.println(newLength); } }
测试结果: