Java的左移(<<),右移(>>),無符號右移(>>>),或與非(&|^~)

不常用,所以給自己記一下,做二進制計算的時候很好用。

public class Demo {

    public static void main(String[] args) {

        /**
         * << 左移運算符,num << 1,相當於num乘以2
         *
         */

        //左移: 10 << 1 = 1010 變成 20
        System.out.println("左移: 10 << 1 = " + Integer.toBinaryString(10) + " 變成 " + (10 << 1));

        //左移: 1 << 10 = 1 變成 1024
        System.out.println("左移: 1 << 10 = " + Integer.toBinaryString(1) + " 變成 " + (1 << 10));

        /**
         * >> 右移運算符,num >> 1,相當於num除以2
         *
         */

        //右移: -4 >> 2 = 11111111111111111111111111111100 變成 -1
        System.out.println("右移: -4 >> 2 = " + Integer.toBinaryString(-4) + " 變成 " + (-4 >> 2));

        //右移: 8 >> 2 = 1000 變成 2
        System.out.println("右移: 8 >> 2 = " + Integer.toBinaryString(8) + " 變成 " + (8 >> 2));

        /**
         * >>> 無符號右移,忽略符號位,空位都以0補齊
         * 當爲正整數時是和右移結果一樣的,但是爲負數時,結果就會不一樣了
         */

        //無符號右移: -4 >>> 2 = 11111111111111111111111111111100 變成 1073741823
        System.out.println("無符號右移: -4 >>> 2 = " + Integer.toBinaryString(-4) + " 變成 " + (-4 >>> 2));

        //無符號右移: 8 >>> 2 = 1000 變成 2
        System.out.println("無符號右移: 8 >>> 2 = " + Integer.toBinaryString(8) + " 變成 " + (8 >>> 2));


        System.out.println("————————————————————————");
        System.out.println("————————————————————————");

        //101
        System.out.println(Integer.toBinaryString(5));
        //011
        System.out.println(Integer.toBinaryString(3));

        //只有兩位都爲1,結果才爲1
        //位與: 5 & 3 = 1 (1)
        System.out.println("位與: 5 & 3 = " + (5 & 3) + " (" + Integer.toBinaryString(5 & 3) + ")");

        //只要有一位是1,結果就是1
        //位或: 5 | 3 = 7 (111)
        System.out.println("位或: 5 | 3 = " + (5 | 3) + " (" + Integer.toBinaryString(5 | 3) + ")");

        //只有兩位一個是1,一個是0,結果纔是1
        //異或: 5 ^ 3 = 6 (110)
        System.out.println("異或: 5 ^ 3 = " + (5 ^ 3) + " (" + Integer.toBinaryString(5 ^ 3) + ")");

        //與全1做異或,然後取反
        //異或非: ~5 = -6 (11111111111111111111111111111010)
        System.out.println("異或非: ~5 = " + (~5) + " (" + Integer.toBinaryString(~5) + ")");
        

        System.out.println("二進制轉十進制: " + Integer.valueOf("10101", 2));
        System.out.println("十進制轉二進制: " + Integer.toBinaryString(21));
        
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章