java复习笔记第一篇:逻辑操作符与位操作符

1.逻辑操作符

 java中逻辑操作符有:&长路与 、&&短路与、|长路或 、||短路或、!取反、^异或。其中:

           &长路 和&&短路与  :无论是长路与还是短路与 ,两边的运算单元都是布尔值 ,任意为假 ,就为假,都为真时才为真

           区别:长路与&,两侧都会被运算。短路与&& ,只要第一个是false ,第二个就不进行运算了。

           |长路或和||短路或:无论长路还是短路或 ,两边的运算都是布尔值。都为假时,才为假 。任意为真时,就为真
           区别:长路或|,两边都会被运算 。短路或||,只要第一个时true,第二个就不进行运行了 。

           !取反:真变为假 ,假变为真。
           ^异或:不同,返回真。相同,返回假。

public class demo07 {
	public static void main(String[] args) {
		//1.长路与& 和  短路与&&
		int i = 1;
		System.out.println(i== 2& i++ ==2);//两边都运行了 i=2
		System.out.println(i);
		int m=1;
		System.out.println(m==2&&m++==2);//第一个为false,第二个没有运行 m=1
		System.out.println(m);
		
		//2.长路或|  和  短路或 ||
		int i2 =1;
		System.out.println(i2==1|i2++==2);//两边都运行了
		System.out.println(i2);//2
		int m2 = 1;
		System.out.println(m2==1||m++==2);//当第一边为true,第二边就不再运行了 
		System.out.println(m2);//1
		
		//3.取反!
		boolean b = true;
		System.out.println(b);//输出true
		System.out.println(!b);//输出false
		
		
		//4.异或
		boolean x = true;
		boolean c = false;
		System.out.println(x^c);// true
		System.out.println(x^!c);//false
		System.out.println(!x^c);
			
	}
}

2.位操作符

  位操作符:左移 <<、右移>>、无符号右移>>>,位或 |,位与  & 、异或  ^,取非   ~

  左移<<:  根据一个整数的二进制表达,将其每一位向左移动,最右边一位补0

  右移>>:也称之为有符号右移。根据一个整数的二进制表达,将其每一位向右移动。对于正数, 带符号右移 >> 会把所有的位右                   移,并在最前面补0;对于负数, 带符号右移 >> 会把所有的位右移,并在最前面补1。

  无符号右移>>>:
         *    如果是一个负数,那么对应的二进制的第一位是1
         *    无符号右移>>>会把第一位的1也向右移动,导致移动后,第一位变成0
         *    这样就会使得负数在无符号右移后,得到一个正数

   位或| :将两个位或的数据进行相加 两个都为1的还是1 。一个为1,一个为0,则变为1。0的还是0。

   位与&:将两个数据进行位的相乘  两个位都为1的还是1 ,一个为1,一个为0,则变为0,0的还是0。

   异或 ^:
         * m   00001001
         *           ^
         * n   00001010  ——>011  下标相同的位置,位数据不同的留下,相同丢掉

   取非 ~:
         * 5的二进制:0000 0101 
         * 取反为:  1111 1010  -6
         * 
         * 6的二进制:00000110
         * 取反为:  11111001   -7
         *  0的二进制: 00000000 00000000 00000000 00000000
         * -1的二进制: 11111111 11111111 11111111 11111111

package day01;

/**
 * 位操作符
 * @author wangli
 *
 */
public class demo08 {
	public static void main(String[] args) {
		/**
		 * 左移 <<
		 * 根据一个整数的二进制表达,将其每一位向左移动,最右边一位补0
		 * 右移>>
		 * 根据一个整数的二进制表达,将其每一位向右移动
		 * 
		 *  带符号右移 >>
	     *	对于正数, 带符号右移 >> 会把所有的位右移,并在最前面补0
		 *	对于负数, 带符号右移 >> 会把所有的位右移,并在最前面补1
		 *	无符号右移>>>
		 *	如果是一个负数,那么对应的二进制的第一位是1
		 *	无符号右移>>>会把第一位的1也向右移动,导致移动后,第一位变成0
		 *	这样就会使得负数在无符号右移后,得到一个正数
		 *
		 */
		System.out.println(-2>>>3);
		System.out.println(2<<3);//最快得到16
		System.out.println(3<<3);//最快得到24
		//右移 >>
		System.out.println(24>>2);
		//位或   |   将两个位或的数据进行相加 两个都为1的还是1 ,一个为1,一个为0,则变为1,0的还是0
		int m=5,n=6;
		System.out.println(Integer.toBinaryString(m));//00001001
		System.out.println(Integer.toBinaryString(n));//00001010
		System.out.println(Integer.toBinaryString(m|n));//00001011
		System.out.println(m|n);
		
		//位与  &   将两个位或的数据进行相乘  两个都为1的还是1 ,一个为1,一个为0,则变为0,0的还是0
		System.out.println(m&n);//00001000
		
		
		/** 异或  ^
		 * m   00001001
		 * 		  ^
		 * n   00001010  ——>011  位置数据不同的留下,相同丢掉
		 */
		System.out.println(m^n);//
		
		/**
		 * 控制台输出二进制的时候将左侧全为0的省略掉了
		 * 取非   ~
		 * 5的二进制:0000 0101 
		 * 取反为:  1111 1010  -6
		 * 
		 * 6的二进制:00000110
		 * 取反为:  11111001   -7
		 *  0的二进制: 00000000 00000000 00000000 00000000
		 * -1的二进制: 11111111 11111111 11111111 11111111
		 * 
		 * 
		 */
		System.out.println(~5);//11111111  11111111  11111111  11111010
		System.out.println(Integer.toBinaryString(-1));//11111111 11111111 11111111 11111111
	}
}

猜你喜欢

转载自blog.csdn.net/wangli1281/article/details/82346180
今日推荐