位运算符基础
- & 与 ;| 或 ;^ 异或 (不进位加法); ~ 非
- 运算符 >> 和 << : 二进制位左右移动
- ’ >>> ’ : 用0填充高位
’ >> ’ : 运算符用符号位填充高位
没有 ‘ <<< ’- 对于int 型,1<<35 <=> 1<<3
long 型:模64
位运算的奇巧淫技
判断奇偶
用 x^1,结果为1:x为奇数;为0:x 为偶数
原因:奇数二进制末尾为1,偶数为0
获取二进制位是1还是0
将 0001 的1移动到相应数位,将原二进制除需判别位的数位用0填充,两二进制 & 运算,得结果
交换两个整数变量的值
//第一种:位运算(三次异或运算)
int a,b;
a=10;
b=20;
System.out.println("交换前:"+"a="+a+",b="+b);
a=a^b;
b=a^b;
a=a^b;
System.out.println("交换后:"+"a="+a+",b="+b);
//第二种:算术运算
int p,q;
p=10;
q=20;
System.out.println("交换前:"+"p="+p+",q="+q);
p=p+q;
q=p-q;
p=p-q;
System.out.println("交换后:"+"p="+p+",q="+q);
不用判断语句求整数绝对值(不觉得很常用)
int abs1(int i) {
return (i ^ (i >> 31)) - (i >> 31);
}
int abs2(int i) {
return (1 - ((i >>> 31) << 1)) * i;
}