D3

第一題:
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
*/


發佈了3 篇原創文章 · 獲贊 23 · 訪問量 30萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章