位运算
指的是可以直接进行二进制数据的计算处理,主要是:与(&)、或(|)、非(!)、异或(^)、反码(~)、移位处理(>>、<<)
- 与运算
public class xxx {
public static void main(String[] args) {
int x = 7; //00000111
int y = 13;//00001101
System.out.println(x & y);
}
}
>>>5//00000101
两位都是1 结果才为1 一个不是1 结果就是0
- 或运算
public class xxx {
public static void main(String[] args) {
int x = 7; //00000111
int y = 13;//00001101
System.out.println(x | y);
}
}
>>>15//00001111
两位只要有一个1 就是1 两位都是0 才为0
- 移位运算
public class xxx {
public static void main(String[] args) {
int x = 2; //00000010
System.out.println(x<<2);
System.out.println(x);
}
}
>>>8//00001000
>>>2//00000010
先左移两位 <<2 变大(乘2 乘两次)
先右移两位 >>2 变小(除以2 除以两次)
请问 &与&&、|与||的区别?
- &和|两个运算符可以进行位运算和逻辑运算;
- 在进行位运算的时候只是针对当前的数据进行 与和或 处理;
- 在进行逻辑运算的时候所有的判断条件都要执行;
- 在逻辑运算上还可以使用&&、||;
- &&:在若干个条件判断的时候,如果前面的条件返回了false,后续所有的条件都不再判断 最终的结果就是false;
- ||:在若干个条件判断的时候,如果前面的条件返回了true,后续条件不在执行,最终就是true;
public class xxx {
public static void main(String[] args) {
int i =2;
if(true&false&(i++>0)) {
System.out.println(1);
}
System.out.println(i);
if(false&&(i++>0)) {
System.out.println(2);
}
System.out.println(i);
}
}
>>>3
>>>3
两个判断条件都是false 但是从输出的i值来说 可见 &是判断了所有的判断条件 &&只要前面的条件返回了false 后续条件不再判断 自然i还是3而不是4
Java中的位运算符:
>>表示右移,如果该数为正,则高位补0,若为负数,则高位补1;
>>>表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0。