基本语法-运算符-位运算符

位运算符

运算符 运算 范例
<< 左移 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);
posted @ 2021-06-16 14:56  犄角旮旯是程序媛吖  阅读(83)  评论(0编辑  收藏  举报