不是太理解有没有人可以讲解一下

img


为什么x==0可以写成!x 还有后面几个 是什么意思 这个不是基本要背的吧 我想理解

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);
    }
        
}