1. 程式人生 > 其它 >基本語法-運算子-位運算子

基本語法-運算子-位運算子

位運算子

運算子 運算 範例
<< 左移 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);