0作为if的判断条件,表示false,!0 = true,也就是等价于x==0,因为这两个条件都是只要x=0的是才表示false
同理x!=0可以写成x
而1作为if的判断条件,表示true(不是0都为true),!(x-1)不就跟上面的!x是一样的逻辑么
%表示取余,&& 表示两边的条件要同时成立,该表达式才为true,!表示取反,即!false = true,!true=false
在c语言中0为假,其他的为真
所以!x就是对x的真假取反,0是为真,其他时候为假,正好对应x==0
例如
if(x==0)
{
ABC;
}
if(),对if来说()里就两种情况,真和假,没第三个可能,当()里的表达式结果为真时条件满足就执行ABC;
真假和数字的关系就是0为假,非0为真
所以简写if(x)就相当于if(x!=0), 而if(!x)就相当于if(x==0)
后面的类似
x只有为0的时候x==0才为真,即结果为1。此时!x的结果就是!0,即为1,二者相等。
当为其他值时x==0都为假,即为0,此时!x的结果为0,二者相等。所以这两相等啊,下面的也一样。
我是这么理解的,不一定正确,供参考:
重点是在C语言中,0表示假,不为0则为真,所以直接计算出结果的值,再根据是不是等于0来判断真假,然后判断这个条件能不能执行,下面是一个测试的例子:
#include <stdio.h>
int main(void){
int x;
x=0;
if(x==0){
printf("x=%d,x==0为真\n",x);
}
if(!x){
printf("x=%d,!x为真\n\n",x);
}
x=1;
if(x!=0){
printf("x=%d,x!=0为真\n",x);
}
if(x){
printf("x=%d,x为真\n\n",x);
}
x=2
if(x==1){
printf("x=%d,x==1为真\n",x);
}
if(!(x-1)){
printf("x=%d,!(x-1)为真\n\n",x);
}
int a = 3;
if(a%2==1){
printf("a=%d,a%%2==1为真\n",a);
}
if(a%2){
printf("a=%d,a%%2为真\n\n",a);
}
a = 21;
if(a%3==0){
printf("a=%d,a%%3==0为真\n",a);
}
if(a%7==0){
printf("a=%d,a%%7==0为真\n",a);
}
if(a%21==0){
printf("a=%d,a%%21==0为真\n\n",a);
}
a=101;
if(a>100){
printf("a=%d,a>100为真\n",a);
}
if(!(a<=100)){
printf("a=%d,!(a<=100)为真\n",a);
}
}