常在網上看到正準備SCJP的的朋友在問,藉此整理一下...
1
2
3
4
5
| 例如:5 << 2
00000000 00000000 00000000 00000101
往左移2
000000 00000000 00000000 0000010100
再轉回10進位,所以結果為20
|
- >> 右移運算子,將位元往右移,如果原本左邊為0就補0,為1時就補1。
1
2
3
4
5
| 例如:5 >> 2
00000000 00000000 00000000 00000101
往右移2
00000000 00000000 00000000 00000001
再轉回10進位,所以結果為1
|
1
2
3
4
5
| 例如:-5 >> 2
11111111 11111111 11111111 11111011
往右移2
11111111 11111111 11111111 11111110
再轉回10進位,所以結果為-2
|
1
2
3
4
5
| 例如:5 >>> 2
00000000 00000000 00000000 00000101
往右移2
00000000 00000000 00000000 00000001
再轉回10進位,所以結果為1,與>>相同
|
1
2
3
4
5
| 例如:-5 >>> 2
11111111 11111111 11111111 11111011
往右移2
00111111 11111111 11111111 11111110
再轉回10進位,結果為1073741822
|
另外,可以在Java中使用
1 2 3 4
|
DecimalFormat df =
new DecimalFormat("00000000,00000000,00000000,00000000");
BigDecimal bigDecimal = new BigDecimal(Integer.toBinaryString(-5 >>> 2));
System.out.println(df.format(bigDecimal));
|
來轉成2進位,方便驗算。
執行結果:
1
|
00111111,11111111,11111111,11111110
|
1
2
3
4
5
5
| 例如:~1
1的二進位
00000000 00000000 00000000 00000001
補數為
11111111 11111111 11111111 11111110
轉為10進位時,就是-2
|
補數 = - (被補數 + 1)
所以10的補數,馬上就可以算出是-11
沒有留言:
張貼留言