Java演算子関連面接問題

4581 ワード

面接問題1:論理双と&&と論理単と&の違いは?(論理二重または|および論理単または|,同理)
共通点:すべて並列関係を表すことができて、falseがあって、falseはすべて表すことができてあるいは関係があって、trueがあって、trueの区別:論理の双和&&、左の式のビットfalseがあるならば、記号の右の式は実行しないで、拡張の論理演算子の短絡の効果と同じ論理の双|、左の式がtrueならば、右は実行しないで、短絡の効果を持ちます
面接問題2:有効な方式表現2の三次方2^3を使ってください
2<<2結果:8
面接問題3:
	      
			int x = -8 ; 
			int y = 10 ;
			System.out.println(x | y) ;

構想:-8の原符号-->逆符号---->補符号と10の補符号による|演算(1則1あり)
	-8	 
		10000000 00000000 00000000 00001000(  )
		11111111 11111111 11111111 11110111(  )
		11111111 11111111 11111111 11111000(  )
	10
		00000000 00000000 00000000 00001010(  )
	---------------------------------------------
		11111111 11111111 11111111 11111010(  )
		11111111 11111111 11111111 11111001(  )
		10000000 00000000 00000000 00000110(  )
	    :						 -6

面接問題4:2つの変数のデータ値の交換を実現するプログラムを設計してください(面接官の考え方:ビット異やの特徴を考えることができますか?)
		//      
		int a = 10 ;
		int b = 20 ;
		System.out.println("a:"+a) ;
		System.out.println("b:"+b) ;
		System.out.println("----------------") ;
		//  1:            ,           !
		/*
		int temp  = a ;	// temp = 10
		a = b ;	//a = 20 
		b = temp ;//b = 10
		System.out.println("a:"+a) ;
		System.out.println("b:"+b) ;
		*/
		
		//  2:     :               ,      
		//  :a,b,a
		//  :a ^ b
		
		a =  a ^ b ;
		b =  a ^ b ;//b = a ^ b ^ b ; b = a = 10
		a =  a ^ b ;//a =  a ^ b ^ a = 20 ;
		System.out.println("a:"+a) ;
		System.out.println("b:"+b) ;
		
		
		//  3:        
		/*
		a = a + b ;
		b = a - b ;
		a = a - b ;
		System.out.println("a:"+a) ;
		System.out.println("b:"+b) ;
		*/
		
		/*
		b = (a+b) - (a=b) ;  
		System.out.println("a:"+a) ;
		System.out.println("b:"+b) ;
		*/

面接問題5:if文フォーマット2で実現したり、三元演算子で実現したりする必要がありますが、この2つに違いはありませんか.
三元演算子で実現でき、ifで実現できるに違いない.ifで実現できれば、必ずしも三元演算子が使えるとは限らない!
どうして?
三元演算子は1種の演算子を説明して、最終的に計算するのは具体的な結果であるべきで、if文は1種の流れ制御文で、もし1種の構造の複雑な文であれば、必ずしも三元を使って実現することができるとは限らないと判断するならば!一般的には,論理記号と選択判断を加えればif文を優先して実現する.