第十四届蓝桥杯集训——JavaC组第七篇——逻辑运算符
目录
第十四届蓝桥杯集训——JavaC组第七篇——逻辑运算符
逻辑运算符
逻辑与
逻辑或
非
逻辑运算法优先级
练习题:
逻辑运算符
- &&逻辑与
- ‖逻辑或
- !逻辑非
逻辑运算与位运算不同,逻辑运算的与和或都是两个与或的符号,当然,如果单独一个就能不能这么叫了,应该叫位运算符,位运算符在讲完进制转换的时候我再来将,大家能更好的理解,不然肯定都蒙圈了。
逻辑与
&&两个与的符号,代表逻辑与,逻辑与前后两个表达式如果都为true则结果为true,如果有任何一个为false则结果为false;
题目,判断某个月份是否符合地球公转周期。
分析,满足地球公转周期的月份是在1月~12月内,故而我们需要判断0>month<=12,那么,我们就可以根据要求列出布尔表达式的写法,写法如下:
package com.item.action;
public class Action {
public static void main(String[] args) {
// 满足地球公转周期的月份
int month = 5;// 判断月份是否在地球公转周期内
//条件1、大于0
boolean start = month > 0;
//条件2、小于等于12,或直接小于13,因为是整数都行
boolean end = month <= 12;
//使用逻辑与判断,因为必须两个都满足才能是符合地球公转周期的月份
boolean result = start && end;
System.out.println(result);
}
}
输出结果:
输出的结果是true代表5月份满足月份要求,故而此程序成立,咱们没有写错。
逻辑或
||两个竖线代表逻辑或,逻辑或的前后两个表达式只要有一个是true,结果就是true,当然,两个true那就更是true了,但是如果两个都是false,那就没办法了,肯定返回false了。
示例:
我们使用一个特殊的表达式,判断x是否在x<-5,x>12的范围内。
package com.item.action;
public class Action {
public static void main(String[] args) {
// 这里先设一个值x=10,肯定不在{x<-5,x>12}中
int x = 10;
boolean left = x < -5;
boolean right = x > 12;
boolean result = left || right;
System.out.println(result);
}
}
结果如下:
非
!,逻辑非,就是代表不,咱们在关系运算符中看到过,有一个叫做【!=】不等于的符号,与这个非有些类似,但是不同的是他是一元运算符。不等于是二元运算符。并且非是控制一个变量的,不等于是处理两个变量的。
测试:
package com.item.action;
public class Action {
public static void main(String[] args) {
// 这里先设一个值x=10,肯定不在{x<-5,x>12}中
int x = 10;
boolean left = x < -5;
boolean right = x > 12;
boolean result = left || right;
//添加了一个!
System.out.println(!result);
}
}
当我们在结果前添加了一个【!】非的符号时发现,我们出现的结果反了过来,证明非的作用也就相当于取反操作了。
逻辑运算法优先级
!>&>|
三个符号的优先级与C语言的类似,但是他们都没有()的级别高。
练习题:
我们用判断闰年的案例来练习逻辑运算符的使用:
1582年以来的置闰规则:
普通闰年:公历年份是4的倍数,且不是100的倍数的,为闰年(如2004年、2020年等就是闰年)。
世纪闰年:公历年份是整百数的,必须是400的倍数才是闰年(如1900年不是闰年,2000年是闰年)。
1582年以前的惯例:四年一闰;如果公元A年的A(正数)能被4整除,那么它就是闰年;如果公元前B年的B(正数)除以4余1,那么它也是闰年。
解析:
1、能被4整除,但不能被100整除,所以这两个之间的关系是【&&】。
2、世纪闰年是【1】的基础上需要加上是否能被400整除的判断,关系是【||】。
我们将两句分析编辑成代码,就能看到如下的内容了:
package com.item.action;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int year = sc.nextInt();
sc.close();
boolean one = year % 4 == 0;
boolean two = year % 100 != 0;
boolean three = year % 400 == 0;
boolean result = one && two || three;
System.out.println(result);
}
}