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