一个数既是5的倍数,又是7的倍数。
应该是用
x%5==0&&x%7==0,
但有个问题就是前面 x%5==0,结果为0,不就是‘假’吗,后面的x%7==0还会运算吗?。我迷了
x%5==0 且 x%7==0
这里的x%5==0表示逻辑判断,当x%5等于0的时候整个表达式的值就是真,否则为假;你误解为表达式的值就是右边这个0,其实不然,而是整个表达式最终的值才是逻辑值;同样x%7==0则一样判断。
表达式1 && 表达式2
只有表达式1为真时,才会继续判断表达式2,否则不再判断表达式2。
不要混淆相等与赋值运算符
比如
if(x=0)这个表达式的最终逻辑就是x,因为x为0,所以条件为假
是的,如果x%5==0的结果为0,即假,那么后面的x%7==0不会再运算了。这就是逻辑运算的短路特性,即如果前面的表达式已经能够确定整个式子的值,后面的表达式就不会再被计算了。
例如,如果我们有一个逻辑表达式a && b,如果a的值为假,那么整个式子的值就已经确定为假了,b就不会再被计算了。
下面是一个例子:
#include <stdio.h>
int main() {
int x = 35;
if (x % 5 == 0 && x % 7 == 0) {
printf("%d是5和7的倍数\n", x);
} else {
printf("%d不是5和7的倍数\n", x);
}
return 0;
}
输出结果为:
35不是5和7的倍数
因为35不是既是5的倍数又是7的倍数。如果把x的值改成70,输出结果就会是:
70是5和7的倍数
因为70既是5的倍数又是7的倍数。
==0和结果为0你搞混了呀
1==0结果为0
0==0结果为1呀