条件必须同时满足才成立
特点:有false则false
public class OperatorDemo { public static void main(String[] args) { int a = 3; int b = 4; int c = 5; System.out.println((a>b) & (a>c));//false & false System.out.println((a>b) & (a2、逻辑“单或”(|)c));//true & false } }
满足一个条件即可成立
特点:有true则true
public class OperatorDemo { public static void main(String[] args) { int a = 3; int b = 4; int c = 5; System.out.println((a>b) | (a>c));//false | false System.out.println((a>b) | (a3、逻辑“异或”(^)c));//true | false } }
相同则为false,不同则为true
public class OperatorDemo { public static void main(String[] args) { int a = 3; int b = 4; int c = 5; System.out.println((a>b) ^ (a>c));//false ^ false System.out.println((a>b) ^ (a4、逻辑“非”(!)c));//true ^ false } }
非true则false,非false则true
特点:偶数个非是它本身
public class OperatorDemo { public static void main(String[] args) { int a = 3; int b = 4; int c = 5; System.out.println(!(a>b));//!false System.out.println(!!(a>b));//!!false System.out.println(!!!(a4、逻辑双与(&&)和逻辑单与(&)区别 共同点:都是表示并列关系,有false则false
不同点:&&具有短路效果(逻辑双与&&如果左边是一个false,右边就不执行了)
public class OperatorDemo { public static void main(String[] args) { int a = 3; int b = 4; System.out.println((++a)==3 & ((b--)==4));//&右边继续执行,结果为false且y自减 System.out.println("a:"+a+",b:"+b); } }public class OperatorDemo { public static void main(String[] args) { int a = 3; int b = 4; System.out.println((++a)==3 && ((b--)==4));//&左侧false,右侧不执行 System.out.println("a:"+a+",b:"+b); } }6、逻辑双或(||)和逻辑单或(|)的区别共同点:有true则true,表示或的关系
不同点:逻辑双或(||)连接的左边表达式如果是true,右边就不执行了,具有短路效果
好处:提高逻辑判断执行效率,开发中经常使用逻辑双与(&&)和逻辑双或(||)
2、位运算符(使用补码计算) 位“与”(&)有0,则0(使用补码计算)
例:3&4(计算出3和4对应的二进制数据:原码、反码、补码)
00000000 00000000 00000000 00000011 3的原码(正数原、反、补相同) 000000000000000000000000000001004的原码(正数原、反、补相同) 00000000000000000000000000000000结果:0(&计算:有0则0) 位“或”(|)有1,则1(使用补码计算)
例:3|4
00000000 00000000 00000000 00000011 3的原码(正数原、反、补相同) 000000000000000000000000000001004的原码(正数原、反、补相同) 00000000000000000000000000000111结果:7(|计算:有1则1) 位“异或”(^)相同则为0,不同则为1
例:3^4
00000000 00000000 00000000 00000011 3的原码(正数原、反、补相同) 000000000000000000000000000001004的原码(正数原、反、补相同) 00000000000000000000000000000111结果:7(^计算:相同为0,不同则1) 特点*一个数据被另一个数据如果位异或两次,其值是它本身!
class OperatorDemo2{ public static void main(String[] args){ //定义两个变量 int a = 10 ; int b = 20 ; System.out.println(a ^ b ^ b) ;// a System.out.println(a ^ b ^ a) ; //b } }试题实现两个变量的数据进行交互
int a = 10 ;
int b = 20 ;
最终要将a和b进行互换
class OperatorTest{ public static void main(String[] args){ //有两个变量 int a = 10 ; int b = 20 ; System.out.println("a:"+a) ; System.out.println("b:"+b) ; System.out.println("---------------------------------------") ; //方式1:使用中间第三方变量(最常用的一种方式:推荐使用第一种) //定义临时变量temp //记录a的值 int temp = a ; //int temp = a = 10 //在将b的值赋值给a // a = b ;//a = 20 //将temp的赋值给b b = temp ; //10 System.out.println("a:"+a) ; System.out.println("b:"+b) ; //方式2:使用位异或的特点^:一个数据被另一个数据位异或两次,其值是它本身 //左边:a,b,a //右边都是: a^b } }(二)三元运算符(三目运算符) 1、格式(表达式) ? 执行 true的结果 : 执行false 的结果;
首先判断表达式是否成立,如果成立,则执行true的结果;否则,执行false的结果;
2、使用class OperatorDemo{ public static void main(String[] args){ //定义两个变量 int a = 10 ; int b = 20 ; //比较较两个数据中的最大值 //(表达式)?执行 true的结果:执行false 的结果; //定义最终结果变量 int max = (a>b)?a:b; System.out.println(max) ; //20 System.out.println("------------------------------------") ; //a和b中的最小值 int min = (ay)?x:y ; //然后使用temp和z进行三元运算符 //定义接收结果变量max2 int max2 =(temp >z)? temp : z ; System.out.println("三个数据中的最大值是:"+max2) ; System.out.println("------------------------------------") ; //方式2:三元运算符是可以嵌套的 (一步走) //定义最终变量max3 int max3 = (x >y)?((x>z)?x:z):((y>z)?y:z) ; //推荐第一种方式 //int max3 = x >y?x>z?x:z:y>z?y:z ; System.out.println("三个数据中的最大值是:"+max3) ; } }欢迎分享,转载请注明来源:内存溢出
评论列表(0条)