一、基础
作用 | Java |
---|---|
按位与 | a & b |
按位或 | a | b |
按位异或 | a ^ b |
按位取反 | ~a |
左移 | a << b |
带符号右移 | a >>b |
无符号右移 | a>>>b |
注:
-
左移不考虑带符号和无符号,左移移除高位,在低位补0。
-
带符号右移,正数高位补0,负数高位补1.
-
无符号右移,正数负数高位都补0
二、妙用
1.利用|
和空格转换字符大小写
('a' | ' ') = 'a'
('A' | ' ') = 'a'
2.利用&
和下划线将英文字符转换为大写
('a' & '_') = 'A'
('A' & '_') = 'A'
3.利用^
和空格进行英文字符的大小写转换
('a' ^ ' ') = 'A'
('A' ^ ' ') = 'a'
4.判断两个数是否异号
int i = -1, j = 2;
boolean k = ((i ^ j) < 0) //true
int i = 1, j = 2;
boolean k = ((i ^ j) < 0) //false
乘积和商可能造成数值溢出。
5.交换
int a = 1, b = 2;
a ^= b;
b ^= a;
a ^= b;
6.加减一
int n = 1;
n = -~n;
int k = 2;
k = ~-k;
三、常用操作
1.n & (n-1)
用来消除数字n最后一个1
2.判断一个数是不是2的指数
2的指数一定只含有一个1
if(n <= 0) return false;
return (n & (n - 1)) == 0 ;
3.查找只出现一次的数字
a ^ a = 0
a^0=a