1. 程式人生 > >java中的位運算

java中的位運算

由於位運算是二進位制運算,不要與一些八進位制數搞混,java中二進位制數沒有具體的表示方法。

public class BitMath{

    public static void main(String[] args){

        System.out.println("010|4="+(010|4));

    }

}

輸出結果:

010|4=12

計算過程:

0000 0000 0000 0000 0000 0000 0000 1000   ?8

0000 0000 0000 0000 0000 0000 0000 0100   ?4

進行“或”計算結果為:

0000 0000 0000 0000 0000 0000 0000 1100   ?12

當位運算中遇見負數,必須把它轉成補碼(不知道什麼是補碼的補習功課去)再進行計算,而不是使用原碼。

程式:

public class BitMath{

    public static void main(String[] args){

        try {

            int x = -7;

            System.out.println("x>>1="+(x>>1));

} catch(Exception e) {

            System.out.println("Exception");

        }

    }

}

輸出結果:

x>>1=-4

計算過程:

1111 1111 1111 1111 1111 1111 1111 1001   ?-7

1111 1111 1111 1111 1111 1111 1111 1100   ?-4

public class BitMath{

    public static void main(String[] args){

        int i = 1;

        int j = -1;

        System.out.println("1>>>31="+(i>>>31));

        System.out.println("-1>>31="+(j>>31));

    }

}

輸出結果:

1>>>31=0

-1>>31=-1

程式:

public class BitMath{

    public static void main(String[] args){

        int a = 1;

       a <<= 31;

        a >>= 31;

        a >>= 1;       

        System.out.println("a="+a);

        int b = 1;

        b <<= 31;

        b >>= 31;

        System.out.println("b="+b);

        int c = 1;

        c >>= 31;

        c <<= 31;

        System.out.println("c="+c);

    }

}

輸出結果:

a=-1

b=-1

c=0

計算過程:

0000 0000 0000 0000 0000 0000 0000 0001   ?a=1

1000 0000 0000 0000 0000 0000 0000 0000   ?a=a<<31後,這裡被當作是負數

1111 1111 1111 1111 1111 1111 1111 1111   ?a=a>>31後,結果為-1

1111 1111 1111 1111 1111 1111 1111 1111   ?a=a>>1後,結果仍為-1

0000 0000 0000 0000 0000 0000 0000 0001   ?c=1

0000 0000 0000 0000 0000 0000 0000 0000   ?c=c>>31後為0

0000 0000 0000 0000 0000 0000 0000 0000   ?0左移31位仍為0