位运算符
一、位运算符
1.1 java支持的运算符
&:按位与
|:按位或
~:按位非
^:按位异或
<<:左位移运算符
>>:右移运算符
>>>:无符号右移运算符
位运算符中,除了~之外均为二元运算符。操作数只能为整型和字符串数据.
二、常见的使用
1、m*2^n
可以利用m<<n:2^n —— 1<<n ;
所以 m2^n —— m1<<n —— m<<n
java中int所能表示的最大数值是31位,加上符号位共32位,所以有以下两个法则:
法则一:任何数左移(右移)32的倍数等于该数的本身。
法则二:在位运算m<<n的计算中,若n为正数,则实际移动的位数为n%32,若为负数,则实际移动的位数为(32+n%32),右移,同理。
左移是乘以2的幂,右移则是除以2的幂。
2、判断一个数n的奇偶性
n&1 == 1? “奇数” : “偶数”
3、不用临时变量交换两个数
int a = 3;
int b = 4;
a = a^b;
b = b^a; //b ^ (a ^ b) = a
a = a^b;//(a ^ b) ^ (b ^ (a ^ b)) = b
4、取绝对值
(a ^ (a>>31)) - (a>>31)
其中a>>31取a的符号,
若a为正数,a>>31等于0,a ^ 0=a,不变。
若a为负数,a>>31等于-1,a ^ -1翻转每一位。