Java基础 -3.3

位运算
指的是可以直接进行二进制数据的计算处理,主要是:与(&)、或(|)、非(!)、异或(^)、反码(~)、移位处理(>>、<<)

  • 与运算
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。
原文地址:https://www.cnblogs.com/sakura579/p/12307329.html