一、(左移右移)
位运算符
运算符 运算 范例
<< 左移 3 << 2 = 12 --> 3*2*2=12 表示数字*2(左移的位数为指数)
>> 右移 3 >> 1 = 1 --> 3/2=1 表示数字/2(左移的位数为指数)
>>> 无符号右移 3 >>> 1 = 1 --> 3/2=1
& 与运算 6 & 3 = 2
| 或运算 6 | 3 = 7
^ 异或运算 6 ^ 3 = 5
~ 反码 ~6 = -7
Eg:在做运算,位运算最快.
>>空出的位数字由原来的最高位决定.
>>>空出的位全部用0来补.
二、与-或-异或
一个数异或同一个数2次,结果还是那个数 eg:7^6^6=7(数据加密)
三、练习
1.最有效率的方式算出2乘以8等于几?2<<3;
2.对两个整数变量的值进行互换(不需要第三方变量)
方法一:第三方变量
方法二:不用第三方变量
//11 = 3 + 8;
//3 = 11 - 8;
//8 = 11 - 3;
/*
n = n + m;//如果n和m的值非常大,容易超出int范围。
m = n - m;
n = n - m;
*/
n = n ^ m;
m = n ^ m;//(n^m)^m;
n = n ^ m;//n ^ (n ^ m)
四、练习
1、获取60的十六进制的表示形式。
Eg:
int num = 60;
//获取60的最低4位,通过&15;
int n1 = num & 15;
System.out.println(n1>9?(char)(n1-10+'A'):n1);
//要获取下一组四位,将60右移4位。
int temp = num >>> 4;
//对temp的值进行最低四位的获取。
int n2 = temp & 15;
System.out.println(n2>9?(char)(n2-10+'A'):n2);
/*
0-9 'A' 'B' 'C' 'D' 'E' 'F'
65 66 67
10 11 12 13 14 15
12 - 10 = 2 + 'A' = (char)67;
*/