Java &、&&、|、||、^、<<、>>、~、>>>等運算符

&(按位與)

   /**
     * &按位與的運算規(guī)則是將兩邊的數(shù)轉(zhuǎn)換為二進制位,然后運算最終值,運算規(guī)則即(兩個為真才為真)1&1=1 , 1&0=0 , 0&1=0 , 0&0=0
     * 3的二進制位是0000 0011 , 5的二進制位是0000 0101 , 那么就是011 & 101,由按位與運算規(guī)則得知,001 & 101等于0000 0001,最終值為1
     * 7的二進制位是0000 0111,那就是111 & 101等于101,也就是0000 0101,故值為5
     */
    public static void demo_1() {
        int i = 3 & 5;
        int y = 5 & 7;
        System.out.println("i=" + i + "  y=" + y);
    }

運算結(jié)果 i = 1 y = 5

&&(邏輯運算符)

/**
     * &&邏輯與也稱為短路邏輯與,先運算&&左邊的表達式,一旦為假,后續(xù)不管多少表達式,均不再計算,一個為真,再計算右邊的表達式,兩個為真才為真。
     */
    public static void demo_2() {
        String str = null;
        if (str != null && (100 / 0 == 0)) {
            System.out.println("&& 一旦表達式為假,后續(xù)不再計算");
        } else {
            System.out.println("(100 / 0 == 0) 如果被計算則會報算數(shù)異常");
        }
    }

運算結(jié)果 (100 / 0 == 0) 如果被計算則會報算數(shù)異常

|(位運算符)

 /**
     * | 按位或和&按位與計算方式都是轉(zhuǎn)換二進制再計算,不同的是運算規(guī)則(一個為真即為真)1|0 = 1 , 1|1 = 1 , 0|0 = 0 , 0|1 = 1
     * 6的二進制位0000 0110 , 2的二進制位0000 0010 , 110|010為110,最終值0000 0110,故6|2等于6
     */
    public static void demo_3() {
        int i = 6 | 2;
        System.out.println(i + "");
    }

運算結(jié)果 6

||(邏輯運算符)

 /**
     * 邏輯或||的運算規(guī)則是一個為真即為真,后續(xù)不再計算,一個為假再計算右邊的表達式。
     */
    public static void demo_4() {
        if (5 > 3 || 3 > 5) {
            System.out.println("結(jié)果為真");
        }
    }

運算結(jié)果 結(jié)果為真

^(異或運算符)

    /**
     * ^異或運算符顧名思義,異就是不同,其運算規(guī)則為1^0 = 1 , 1^1 = 0 , 0^1 = 1 , 0^0 = 0
     * 5的二進制位是0000 0101 , 9的二進制位是0000 1001,也就是0101 ^ 1001,結(jié)果為1100 , 00001100的十進制位是12
     */
    public static void demo_5() {
        int i = 5 ^ 9;
        System.out.println("異或運算符=" + i);
    }

運算結(jié)果 12

<<(左移運算符)

 /**
     * 5<<2的意思為5的二進制位往左挪兩位,右邊補0,5的二進制位是0000 0101 , 就是把有效值101往左挪兩位就是0001 0100 ,正數(shù)左邊第一位補0,負數(shù)補1,等于乘于2的n次方,十進制位是20
     */
    public static void demo_6() {
        int i = 5 << 2;
        System.out.println("左移運算符=" + i);
    }

運算結(jié)果 左移運算符=12

>>(右移運算符)

/**
     *
     * 凡位運算符都是把值先轉(zhuǎn)換成二進制再進行后續(xù)的處理,5的二進制位是0000 0101,右移兩位就是把101左移后為0000 0001,正數(shù)左邊第* 一位補0,負數(shù)補1,等于除于2的n次方,結(jié)果為1
     */
    public static void demo_9() {
        int i = 5 << 2;
        System.out.println("右移運算符=" + i);
    }

運算結(jié)果 右移運算符=1

~(取反運算符)

/**
     * 
     * 取反就是1為0,0為1,5的二進制位是0000 0101,取反后為1111 1010,值為-6
     */
    public static void demo_8() {
        int i = ~8;
        System.out.println("取反運算符=" + i);
    }

運算結(jié)果 取反運算符=-6

>>>(正數(shù)無符號右移)

/**
     *
     * 無符號右移運算符和右移運算符的主要區(qū)別在于負數(shù)的計算,因為無符號右移是高位補0,移多少位補多少個0。
     * 15的二進制位是0000 1111 , 右移2位0000 0011,結(jié)果為3
     */
    public static void demo_9() {
        int i = 15 >>> 2;
        System.out.println("無符號右移運算符=" + i);
    }

運算結(jié)果 無符號右移運算符=3

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容