面试题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:
请设计一个程序,实现两个变量数据值的交换
(面试官的思路:能否想到位异或的特点?)
//定义两个变量
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实现,又可以使用三元运算符来实现,那么这两个有没有区别?
能用三元运算符实现,一定能够使用if实现;如果能用if实现,不一定能使用三元运算符!
为什么?
三元运算符描述的一种运算符,最终计算的应该是具体的结果,if语句是一种流程控制语句,如果牵扯判断如果是一种
结构复杂的语句,不一定能够使用三元去实现! 一般情况,如果带有逻辑符号以及加上选择判断,优先采用if语句实现