51,410
社区成员
发帖
与我相关
我的任务
分享符号:&、|、^、<<、>>、>>>
理解:将十进制的数据转换为二进制做运算
1.&与:同位比较,两者为1,结果才为1
public class 文件名{
public static void main(String[] args){
byte num1 = 23;//0001,0111
byte num2 = 9; //0000,1001
//0000,0001
//底层原理:
//num1 - byte:0001,0111
// int:0000,0000,0000,0000,0000,0000,0001,0111
//num2 - byte:
// int:0000,0000,0000,0000,0000,0000,0000,1001
// 做运算 :0000,0000,0000,0000,0000,0000,0000,0001
// (byte):0000,0001
byte result = (byte)(num1 & num2);
System.out.println(result);//1 -- 0000,0001
}
}
2.|或:同位比较,两者有1,结果就为1
public class 文件名{
public static void main(String[] args){
int num1 = 23;//0000,0000,0000,0000,0000,0000,0001,0111
int num2 = 9; //0000,0000,0000,0000,0000,0000,0000,1001
//0000,0000,0000,0000,0000,0000,0001,1111
System.out.println(num1 | num2);//31 - 0000,0000,0000,0000,0000,0000,0001,1111
}
}
3.^异或:同位比较,两者相同为0,不同为1
public class 文件名{
public static void main(String[] args){
int num1 = 23;
//0000,0000,0000,0000,0000,0000,0001,0111
int num2 = 9; //0000,0000,0000,0000,0000,0000,0000,1001
//0000,0000,0000,0000,0000,0000,0001,1110
System.out.println(num1 ^ num2);//30 - 0000,0000,0000,0000,0000,0000,0001,1110
}
}
4.<<左移:整体向左移动n位,就用n个0补位
注意:补到最后
public class 文件名{
public static void main(String[] args){
int num1 = 1024;
//0000,0000,0000,0000,0000,0100,0000,0000
System.out.println(num1 << 2);//4096
//0000,0000,0000,0000,0001,0000,0000,0000
}
}
5.>>右移:整体向右移动n位,就用n个最高位补位
注意:补到最前
public class 文件名{
public static void main(String[] args){
int num1 = 1024;
//0000,0000,0000,0000,0000,0100,0000,0000
System.out.println(num1 << 2);//4096
//0000,0000,0000,0000,0001,0000,0000,0000
}
}
6.>>>无符号位右移:整体向右移动n位,就用n个0补位
注意:补到最前
public class 文件名{
public static void main(String[] args){
int num3 = 1024;
//0000,0000,0000,0000,0000,0100,0000,0000
//0000,0000,0000,0000,0000,0001,0000,0000
System.out.println(num3 >>> 2);//256
int num4 = -1024;
//1111,1111,1111,1111,1111,1100,0000,0000
//0011,1111,1111,1111,1111,1111,0000,0000
System.out.println(num4 >>> 2);//1073741568
}
}
经典面试题一:使用最有效率的方式计算出4*8
public class 文件名{
public static void main(String[] args){
System.out.println(4<<3);//32
//0000,0000,0000,0000,0000,0000,0000,0100
//0000,0000,0000,0000,0000,0000,0010,0000
}
}
经典面试题2:描述出下列代码的运行结果
public class 文件名{
public static void main(String[] args){
System.out.println((int)(char)(byte)-1);//65535
//-1 int:1111,1111,1111,1111,1111,1111,1111,1111
//(byte):1111,1111
//(char):1111,1111,1111,1111
//(int) :0000,0000,0000,0000,1111,1111,1111,1111
}
}
&、|、^:前后为数值,符号为位运算符 &、|、^:前后为boolean值,符号为逻辑运算符
右移和无符号位右移在处理正数时是一样的
