基本语法-运算符-位运算符
位运算符
运算符 | 运算 | 范例 |
---|---|---|
<< | 左移 | 3 << 2 = 12 --> 3 * 2 * 2 = 12 |
>> | 右移 | 3 >> 1 =1 --> 3 / 2 = 1 |
>>> | 无符号右移 | 3 >>> 1 = 1 --> 3/2 = 1 |
& | 与运算 | 6 & 3 = 2 |
l | 或运算 | 6 l 3 = 7 |
^ | 异或运算 | 6 ^ 3 = 5 |
~ | 取反运算 | ~6 = -7 |
- 位运算是直接对整数的二进制进行的运算
【典型代码】
int i = 21;
i = -21;
System.out.println("i << 2 :" + (i << 2));
System.out.println("i << 3 :" + (i << 3));
System.out.println("i << 27 :" + (i << 27));
int m = 12;
int n = 5;
System.out.println("m & n :" + (m & n));
System.out.println("m | n :" + (m | n));
System.out.println("m ^ n :" + (m ^ n));
【面试题】
能否写出最高效的2*8的实现方式?
- 2 << 3 或 8 << 1
【特别说明】
1.位运算符操作的都是整型的数据
2.左移和右移
- 左移在一定范围内,每向左移1位,相当于*2
- 右移在一定范围内,每向右移1位,相当于/2
【典型题目】
1.交换两个变量的值
int m = 10;
int n = 20;
m = m ^ n;
n = m ^ n;
m = m ^ n;
System.out.println("m = " + m + ",n = " + n);
2.实现60的二进制到十六进制的转换
- 方式一:自动实现
String str1 = Integer.toBinaryString(60);//二进制
String str2 = Integer.toHexString(60);//十六进制
- 方式二:手动实现
int i1 = 60;
int i2 = i1 & 15;//15的后四位是1111,i1&15得到的数是自己的后四位提取出来的
String j = (i2 > 9)?(char)(i2 - 10 + 'A') + "" : i2 + "";//(i2 - 10 + 'A')是为了将十进制用十六进制来表示出来
int temp = i1 >>> 4;//因为i1最后四位已经得到,就无符号右移4位,取出倒数第二个的后四位
i2 = temp & 15;
String k = (i2 > 9)?(char)(i2 - 10 + 'A') + "" : i2 + "";
System.out.println(k + "" + j);
作者:犄角旮旯是程序媛吖
版权:本文版权归作者和博客园所有,欢迎转载,未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。