基本語法-運算子-位運算子
阿新 • • 發佈:2021-06-16
位運算子
運算子 | 運算 | 範例 |
---|---|---|
<< | 左移 | 3 << 2 = 12 --> 3 * 2 * 2 = 12 |
>> | 右移 | 3 >> 1 =1 --> 3 / 2 = 1 |
>>> | 無符號右移 | 3 >>> 1 = 1 --> 3/2 = 1 |
& | 與運算 | 6 & 3 = 2 |
l | 或運算 | 6 l 3 = 7 |
^ | 異或運算 | 6 ^ 3 = 5 |
~ | 取反運算 | ~6 = -7 |
- 位運算是直接對整數的二進位制進行的運算
【典型程式碼】
int i = 21; i = -21; System.out.println("i << 2 :" + (i << 2)); System.out.println("i << 3 :" + (i << 3)); System.out.println("i << 27 :" + (i << 27));
int m = 12;
int n = 5;
System.out.println("m & n :" + (m & n));
System.out.println("m | n :" + (m | n));
System.out.println("m ^ n :" + (m ^ n));
【面試題】
能否寫出最高效的2*8的實現方式?
- 2 << 3 或 8 << 1
【特別說明】
1.位運算子操作的都是整型的資料
2.左移和右移
- 左移在一定範圍內,每向左移1位,相當於*2
- 右移在一定範圍內,每向右移1位,相當於/2
【典型題目】
1.交換兩個變數的值
int m = 10;
int n = 20;
m = m ^ n;
n = m ^ n;
m = m ^ n;
System.out.println("m = " + m + ",n = " + n);
2.實現60的二進位制到十六進位制的轉換
- 方式一:自動實現
String str1 = Integer.toBinaryString(60);//二進位制
String str2 = Integer.toHexString(60);//十六進位制
- 方式二:手動實現
int i1 = 60; int i2 = i1 & 15;//15的後四位是1111,i1&15得到的數是自己的後四位提取出來的 String j = (i2 > 9)?(char)(i2 - 10 + 'A') + "" : i2 + "";//(i2 - 10 + 'A')是為了將十進位制用十六進位制來表示出來
int temp = i1 >>> 4;//因為i1最後四位已經得到,就無符號右移4位,取出倒數第二個的後四位
i2 = temp & 15;
String k = (i2 > 9)?(char)(i2 - 10 + 'A') + "" : i2 + "";
System.out.println(k + "" + j);