int a = 10;
int b = 10;
int c = 10;
a = b++; a=10,b=11 ,c=10
c = --a; a=9,b=11 ,c=9
b = ++a; a=10,b=10 ,c=9
a = c--; a=9,b=10 ,c=8
請分別計算出a,b,c的值
int x = 4;
int y = (x++)+(++x)+(x*10);
x=6
y=4+6+60=70
請分別計算出x,y的值
面試題:
short s=1;
s = s+1;
short s=1;
s+=1;
上面兩個代碼有沒有問題,如果有,那裏有問題。
第一個有問題
s += 1;
不是 s = s + 1;
而是 s = (s的數據類型)(s + 1);
面試題:
請用最有效率的方式寫出計算2乘以8的結果?
2 * 8
答: 2 << 3
面試題:
請實現兩個整數變量的交換
int a=3; int b=4;
方式1:使用變量
int c = a;
a = b;
b = c;
方式2:用位異或實現
左邊:a,b,a ,右邊:a ^ b
/*
a = a ^ b;
b = a ^ b; //a ^ b ^ b = a
a = a ^ b; //a ^ b ^ a = b
/*
位運算符:
&,|,^,~
<<,>>,>>>
注意:
要做位運算,首先要把數據轉換爲二進制。
*/
class OperatorDemo {
public static void main(String[] args) {
//&,|,^,~
int a = 3;
int b = 4;
System.out.println(3 & 4);
System.out.println(3 | 4);
System.out.println(3 ^ 4);
System.out.println(~3);
}
}
/*
分析:因爲是位運算,所以我們必須先把數據換算成二進制。
3的二進制:11
00000000 00000000 00000000 00000011
4的二進制:100
00000000 00000000 00000000 00000100
&位與運算:有0則0。
00000000 00000000 00000000 00000011
&00000000 00000000 00000000 00000100
-----------------------------------
00000000 00000000 00000000 00000000
結果是:0
|位或運算:有1則1。
00000000 00000000 00000000 00000011
|00000000 00000000 00000000 00000100
-----------------------------------
00000000 00000000 00000000 00000111
結果是:7
^位異或運算:相同則0,不同則1。
00000000 00000000 00000000 00000011
&00000000 00000000 00000000 00000100
-----------------------------------
00000000 00000000 00000000 00000111
結果是:7
~按位取反運算符:0變1,1變0
00000000 00000000 00000000 00000011
~11111111 11111111 11111111 11111100 (補碼)
補碼:11111111 11111111 11111111 11111100
反碼:11111111 11111111 11111111 11111011
原碼:10000000 00000000 00000000 00000100
結果是:-4
*/