
条件必须同时满足才成立
特点:有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) & (ac));//true & false
}
}
2、逻辑“单或”(|)
满足一个条件即可成立
特点:有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) | (ac));//true | false
}
}
3、逻辑“异或”(^)
相同则为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) ^ (ac));//true ^ false
}
}
4、逻辑“非”(!)
非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(!!!(a
4、逻辑双与(&&)和逻辑单与(&)区别
共同点:都是表示并列关系,有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条)