http://www.verejava.com/?id=16992602784016 public class Operation5
{
public static void main(String[] args)
{
//位運算
/*
包括:
與 &, 或 |, 取反 ~, 異或 ^
帶符号左移<<, 帶符号右移 >>, 無符号右移 >>>
1. & 就是二進制位如果都是1則為1,否則為0
2. | 就是二進制位如果都是0則為0,否則為1
3. ~ 就是二進制位如果是0取反變成1,否則如果是1取反變成0;
4. ^ 就是運算兩邊二進制位兩邊同時相等時為0,否則為1
5. <<就是将二進制位逐位向左移動n位,後面補n個0,相當于乘2;
6. >>就是将二進制位逐位向右移動n位,前面補n個符号位,向當于除2;
6. >>>就是将二進制位逐位向右移動n位,前面補n個0
*/
byte a=1; //二進制 00000001
byte b=8; //二進制 00001000
byte c=127; //二進制 01111111
byte d=-127;//二進制 10000001
System.out.println(a&b); //結果 00000000
System.out.println(a|b); //結果 00001001 2^3+2^0=9
System.out.println(~a); //結果 11111110補碼 轉換為原碼=10000001=-1-1=-2
System.out.println(a^b); //結果 00001001 =9;
System.out.println(a<<1); //結果 00000010 2^1=2
System.out.println(c<<1); //結果 11111110 =254
System.out.println(a>>1); //結果 00000000 =0
System.out.println(c>>1); //結果 00111111 =63
System.out.println(d>>1); //結果 11000000補碼 原碼=10111111=-63-1=-64
System.out.println(d>>>1);//結果 01000000原碼
/*
注意:
1.計算機存儲時 二進制第一位是表示符号位 1 代表負數, 0代表正數
2.計算機存儲時以補碼的方式存儲的, 正數的補碼跟原碼一樣,負數的補碼是去掉第一位符号位取反然計算結果後 再 + 1 得到的.
3. 那補碼轉換成原碼就反過來 去掉第一位取反計算結果後 再-1.
4. System.out.println 沒有 System.out.println(byte b)方法,計算機先自動将byte轉化成 int 然後在移動
*/
}
}