通常位运算包括:位逻辑运算,移位运算。
位逻辑运算:
按位非:~
按位与:&
按位或:|
按位异或:^
移位运算:
左移动:<< java中的最高位为符号位,移位注意最高位被占用。
右移动:>>最高位符号位保存不变
右移动用0填充:>>>最高位用0填充
按位非:~常用于求正值的负数或负值的正数。
eg:
int a = 9;
int b = ~a + 1;
b == -9;
按位与:
(1)可以用于清零 10100111 & 00000000
(2)可以取其中的位:10100111 & 00001111
按位或:
(1)将某些位固定为1
按位异或:
(1)特定位翻转 10001110^00001111 == 10000001
(2)保留原值
(3)交换两个值 a = a^b;b = a^b;a = a^b;
运算符优先级:
~ < 算术运算符 < & < ^ < |
eg:
int n = 7;
n<<=3;
n = n&n+1|n+2^n+3;
n>>=2;
结果:n=14
n&n+1|n+2^n+3 =(n&(n+1))|((n+2)^(n+3))