逻辑运算符的用法:
·逻辑“与”运算符(AND):又称逻辑乘(符号“ * ”或“&&”)
0^0=0 0^1=0 1^0=0 1^1=1
两个参与运算的数有一个数为0,运算结果为0;两个数都为1时,结果才为1。
· 逻辑“或”运算符(OR):又称逻辑加(符号“ + ”或“ || ”)
0||0=0 0||1=1 1||0=1 1||1=1
两个参与运算数的相应码位只要有一个数为1,运算结果为1;只有两位数码均为0,结果才为0。
·逻辑“非”运算(NO):实现逻辑否定,进行求反运算(符号“ ! ”)
!0=1 !1=0
实质意义为取反,即0=1,1=0。
·逻辑“异或”运算(XOR):(符号“ ^ ”)
0^0=0 0^1=1 1^0=1 1^1=0
当两个参与运算的数取值不同,结果为1,否则即两数相同,结果为零。
逻辑运算符的优先级:“非” > “和” > “或”
洛谷 P5710 【深基3.例2】数的性质
题目描述
一些数字可能拥有以下的性质:
- 性质 1:是偶数;
- 性质 2:大于 4 且不大于 12。
小A 喜欢这两个性质同时成立的数字;Uim 喜欢这至少符合其中一种性质的数字;八尾勇喜欢刚好有符合其中一个性质的数字;正妹喜欢不符合这两个性质的数字。
输入格式
输入一个数字 x(0≤x≤1000)
输出格式
输出这 4 个人是否喜欢这个数字,如果喜欢则输出1
,否则输出0
,用空格分隔。
输入输出样例
输入:
12
输出:
1 1 0 0
第一版代码:(未AC,有一个数据出错)
#include <iostream>
using namespace std;
int main()
{
int n,a=0,b=0,c=0,d=0;
scanf("%d",&n);
if((n%2==0)&&((n>4)&&(n<=12))) a=1;
if((n%2==0)||((n>4)&&(n<=12))) b=1;
if((n%2!=0)||((n<4)||(n>12))) c=1; //问题出在这里!
if((n%2!=0)&&((n<4)||(n>12))) d=1;
printf("%d %d %d %d",a,b,c,d);
return 0;
}
错误测试点数据:
输入:1
输出:0 0 0 1
第二版代码:(已AC)
#include <iostream>
using namespace std;
int main()
{
int n,a=0,b=0,c=0,d=0;
scanf("%d",&n);
if((n%2==0)&&((n>4)&&(n<=12))) a=1;
if((n%2==0)||((n>4)&&(n<=12))) b=1;
if((n%2==0)^((n>4)&&(n<=12))) c=1; //用异或表示仅符合其中的一项
if((n%2!=0)&&((n<=4)||(n>12))) d=1;
printf("%d %d %d %d",a,b,c,d);
return 0;
}