位运算符:
对两个操作数中的每一个二进制位都进行运算
位运算符功能:
1、按位取反 ~
2、按位与 & 有零则零 全为1才1
3、按位或 | 有1则1 全为零才零
4、按位异或 ^ 相同为零 不同为1
位移运算符
左移:"a<<b; "将二进制形式的a逐位左移b位,最低位空出的b位补0
带符号右移:"a>>b; "将二进制形式的a逐位右移b位,最高位空出的b位补原来的符号位
无符号右移:"a>>>b;"将二进制形式的a逐位右移b位,最高位空出的b位补0
位移运算符正数示例:
100 00000000 00000000 00000000 01100100
100<<3 00000000 00000000 00000011 00100000
100>>3 00000000 00000000 00000000 00001100
100>>>3 00000000 00000000 00000000 00001100
位移运算符负数示例:
-100 11111111 11111111 11111111 10011100
-100<<3 11111111 11111111 11111100 11100000
-100>>3 11111111 11111111 11111111 11110011
-100>>>3 00011111 11111111 11111111 11110011
然后 面试题
面试题:以最快的速度计算8*4结果?
package Stringlei;
import java.util.Scanner;
public class Bianliang {
public static void main(String[] args) {
/* 面试题:以最快的速度计算8*4结果?*/
//int res = 8 * 4;
//这样肯定就错了
//用位移运算
//先写出8二进制 再写出结果32二进制 看一下
// 0000 1000
// 0010 0000
//左移了两位
//所以计算机语言 要想最快
System.out.println(8 << 2);
}
}
00000000 00000000 00000000 00001000 8
10000000 00000000 00000000 00100000 32
使用位移的方法是最快的。
int result = 8<<2;
左移算法:位移数作为2的次幂与操作数相乘
10<<2=40
右移算法:操作数除以位移数的2次幂
面试题:通过键盘输入,初始化两个数将这两个数据交换位置后,输出显示交换后的数据。不能通过第三个变量交换两个数
第一种方案 a = a + b - (b = a);
package Stringlei;
import java.util.Scanner;
public class Bianliang {
public static void main(String[] args) {
//### 面试题:通过键盘输入,初始化两个数将这两个数据交换位置后,输出显示交换后的数据。
//不能通过第三个变量交换两个数
System.out.println("输入a为:");
Scanner input = new Scanner(System.in);
int a = input.nextInt();
System.out.println("输入b为:");
int b = input.nextInt();
a = a + b - (b = a);
System.out.println("a =" + a + " b = " + b);
}
}
第二种方案
a = a + b;
b = a - b;
a = a - b;
public class Bianliang {
public static void main(String[] args) {
//### 面试题:通过键盘输入,初始化两个数将这两个数据交换位置后,输出显示交换后的数据。
//不能通过第三个变量交换两个数
int a = 1;
int b = 2;
a = a + b;
b = a - b;
a = a - b;
System.out.println("a =" + a + " b = " + b);
}
}
第三种方案 最快的方法 位移方式 异或(a 与 b 不能相同 不能相同 不然为0)
异或三次 a b a
a = a ^ b;
b = a ^ b;
a = a ^ b;
package Stringlei;
public class Bianliang {
public static void main(String[] args) {
//### 面试题:通过键盘输入,初始化两个数将这两个数据交换位置后,输出显示交换后的数据。
//不能通过第三个变量交换两个数
int a = 1;
int b = 2;
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println("a =" + a + " b = " + b);
}
}