Java_移位运算符以及&和&&,|和||,^和~的含义和使用

<<,>>,>>>代表java中的移位运算符

  • "<<"表示左移运算符
    例如8<<2,表示将8向左移2位,结果为32。低位补0。
    8的二进制:1 0 0 0
    向左移动两位结果为1 0 0 0 0 0,换算成十进制即为32,也可以简单的理解为,左移就是将数变大,相当于8*2^2=32。
    左移运算符的运算规律:将左边的数按照右边的数往左移动几位。
  • ”>>”表示带符号右移运算符
    例如 8>>2,表示将8向右移动2位,结果为2。高位补0。
    8的二进制:1 0 0 0
    向右移动两位:0 0 1 0即为2,也可以简单的理解为将数向右移位就是将数变小,相当于8除以2^2=2。
    右移运算符运算规律:将左边的数按照右边的数右移几位。
  • ”>>>”表示无符号右移运算符。高位补0
    例如8>>>2表示将8向右移位2位,结果为2。

示例代码

        int a = 8 << 2;
        int b = 8 >> 2;
        int c = 8 >>> 2;
        System.out.println(a);//输出为32
        System.out.println(b);//输出为2
        System.out.println(c);//输出为2

>>和>>>的区别

对于正数而言,>>和>>>没有任何区别。

对于负数而言,例如-2>>1。-2的二进制为1000 0000 0000 0010,-2>>1后为1000 0000 0000 00001,即值为-1

而-2>>>1代表如下:即值为2147483647

代码实例

package com.rong.map;

public class Test01 {
    public static void main(String[] args) {
        int a1 = 2 >> 1;
        int b1 = -2 >> 1;
        System.out.println(a1);//输出为1
        System.out.println(b1);//输出为-1

        int a2 = 2 >>> 1;
        int b2 = -2 >>> 1;
        System.out.println(a2);//输出为1
        System.out.println(b2);//输出为2147483647
    }
}

&&和&的区别

  • Java中&&和&都是表示与的逻辑运算符,都表示逻辑运算符and,当两边的表达式都为true的时候,整个运算结果才为true,否则为false。
  • &&的短路功能,当第一个表达式的值为false的时候,则不再计算第二个表达式;&则两个表达式都执行。
  • &可以用作位运算符,当&两边的表达式不是Boolean类型的时候,&表示按位与操作。

示例代码(按位与)

package com.rong.map;

public class Test01 {
    public static void main(String[] args) {
        /**
         * 5的二进制数为0101
         * 6的二进制数为0110
         * 所以a按位与后0100
         */
        int a = 5&6;
        System.out.println(a);//所以a这里输出为4
    }
}

I和||的区别

  • Java中||和|都是表示与的逻辑运算符,都表示逻辑运算符or,只要有一边为true(或者两边都为true),则整个逻辑运算为true
  • ll的短路功能,当第一个表达式的值为true的时候,则不再计算第二个表达式;|则两个表达式都执行。
  • |可以用作位运算符,当&两边的表达式不是Boolean类型的时候,|表示按位或操作。

示例代码(按位或)

package com.rong.map;

public class Test01 {
    public static void main(String[] args) {
        /**
         * 5的二进制数为0101
         * 6的二进制数为0110
         * 所以a按位或后0111
         */
        int a = 5|6;
        System.out.println(a);//所以a这里输出为7
    }
}

^(按位异或)

  • java中的^代表的是按位异或的操作
  • Java中的^也可以表示逻辑运算符,^的两边的表达式必须一边为true一边为false才会执行,都为true或都为false都不会执行

示例代码

package com.rong.map;

public class Test01 {
    public static void main(String[] args) {

        if(3>2 ^ 3<3) {
	    System.out.println("hello");//输出hello
	}
        /**
         * 5的二进制数为0101
         * 6的二进制数为0110
         * 即a按位异或后0011
         */
        int a = 5^6;
        System.out.println(a);//所以a这里输出为3
    }
}

~(按位非)

~在java中代表的是按位非的操作

对一个数来说,例如8,则求~8的步骤为:

(1).8的二进制为0000 0000 0000 1000

(2).对其取反      1111 1111  1111  0111    (包括符号位)

(3)再对其取反   1000 0000 0000 1000    (不包括符号位)

(4).对其加1        1000 0000 0000 1001

所以~8 = -9

package com.rong.test;

public class Test {

	public static void main(String[] args) throws InterruptedException {					
		int a = ~2;
		//2的原码是0000 0000 0000 0010
		//2先取反为1111 1111 1111 1101
		//再除符号位取反1000 0000 0000 0010
		//再对其加1000 0000 0000 0011
		System.out.println(a);//这里输出则为-3
	}
}
发布了60 篇原创文章 · 获赞 10 · 访问量 9179

猜你喜欢

转载自blog.csdn.net/chaseqrr/article/details/104410487