按位运算符
按位运算符有六个:
& 按位与(AND) | 按位或(OR)
^ 按位异或(EOR) ~ 取反(NOT)
>> 右移 <<左移
1.AND运算符
AND运算符 | 0 | 1 |
0 | 0 | 0 |
1 | 0 | 1 |
char letter1 = ‘A’, letter2 = ‘Z’, result = 0;
result = letter1 & letter2;
计算:
letter1:0x41 0100 0001
letter2: 0x5A 0101 1010
result: 0x40 0100 0000
//result = ‘@’;
2.OR运算符
OR运算符 | 0 | 1 |
0 | 0 | 1 |
1 | 1 | 1 |
short vredraw = 0x01;
short hredraw = 0x02;
style = hredraw | vredraw;
hredraw:0x02 0000 0000 0000 0010
vredraw:0x01 0000 0000 0000 0001
style:0x03 0000 0000 0000 0011
3.EOR运算符
EOR运算符 | 0 | 1 |
0 | 0 | 1 |
1 | 1 | 0 |
result = letter1^ letter2;
letter1:0x41 0100 0001
letter2: 0x5A 0101 1010
result: 0x1B 0001 1011
// result此时为十进制的27
现在假设first的值是’A’ (0100 0001),last的值是’Z’ (0101 1010)
first ^= last; // f = 0001 1011
last ^= first; // l = 0100 0001
first ^= last; //f = 0101 1010
//first和last在不占用任何中间存储单元的情况下交换了值。这适用于所有整数值。
4.NOT运算符
NOT运算符(取反) | 0 | 1 |
~ | 1 | 0 |
result = ~letter;
如果letter是0100 0001,那么变量result结果为1011 1110,即0xBE,或十进制值190。
5.移位运算符
“离开”变量任一端的位都将丢失。
十进制数16387的二进制表示: 0100 0000 0000 0011
向左移动两位: 0000 0000 0000 1100 结果:12
//(左边这两位向左移出边界,被舍弃)
向右移动两位: 0001 0000 0000 0000 结果:4096
//(右边这两位向左移出边界,被舍弃)