C语言中if后面的!有什么用

#include <stdio.h>

int main()

{

int x;

printf("输入一个数");

scanf("%d",&x);

if(!x==0)

{

printf("x不等于0");

}

else

printf("x等于0");

return 0;

}
如果把0改成3或2,包括把printf后面的也改成3或2,然后怎么输入都无法输出x不等于0这句话,但是改成0就可以正常输入输出,这个!到底有什么用

第1个回答  2014-06-20
取反的符号。优先级大于后面的==
所以是先对x取反,再跟后面的比较。
你输入非0数据,那么取反后就是0,0和0比较是相等的,那么条件就是真,执行if内语句

所以说,你这个程序本身是有问题的,按程序的意思,应该是if(X!=0)
第2个回答  2014-06-20
!是取反的意思,如果表达式为真,加上!符号,那么整个表达式就为假,反之,如果表达式为假,加上!后,这个表达式就为真,
你得if(!x==0) 如果x等于0,则这个表达式为真,加上!,取反为假,所以if条件为假

反之x不等于0,则,这个表达式为假,加上!,取反为真,if条件为真。追问

最大问题就是,如果把x后面的0如果改成别的数,为什么就无法为假呢?比如说把所有0都改成3,那么无论输入3还是2都不执行if下面的printf,为什么?

追答

现在的情况是,你输入非0值,他会显示if下面的printf
如果你把所有的0改为2,则你输入除了2以外的数,会显示if下面的printf

第3个回答  2014-06-20
!是取反的意思
如果你要这种效果的话就这样改
if(x!=0)

{

printf("x不等于0");

}
这里!也是“不”的意思===》"!="<==>"不等于"理解吗?
满意请采纳,谢谢!追问

最大问题就是,如果x后面的0如果改成别的数,为什么就无法为假呢?

追答

你说的是那个位置?
请将该位置复制出来,

第4个回答  2014-06-20
!x中的!,表示逻辑非。
如果x等于0,!x为真,c语言里用数值1表示逻辑真;
如果x不等于0,!x为假,c语言里用数值0表示逻辑假;追问

最大问题就是,如果把x后面的0如果改成别的数,为什么就无法为假呢?比如说把所有0都改成3,那么无论输入3还是2都不执行if下面的printf,为什么?

追答

!x中的!,表示逻辑非。
如果x等于0,!x为真,c语言里用数值1表示逻辑真;
如果x不等于0,!x为假,c语言里用数值0表示逻辑假;

如上所述,!x不可能等于2或者3,所以都不输出"x不等于0"这句话。

还有一点是运算符的优先级,"!x"是先算的,然后才判断"==0"

追问

也就是说逻辑非运算符只能判断真或假,无法判断别的12345等数字?

追答

逻辑非运算符,得出的结果只有0或者1。

写个程序,你运行看看,想想

#include <stdio.h>

int main()
{
    int x;

while(1)
{
    printf("输入一个数:");
    scanf("%d", &x);
    
    printf("!%d的值为%d\n", x, !x);
    
    if(!x == 0)
    {
printf("%d不等于0\n", x);
    }
    else
    {
     printf("%d等于0\n", x);
    }
    
    printf("\n");
    }
    
    return 0;
}

本回答被提问者采纳
第5个回答  2014-06-20
!x==0 就是 !(x==0),后面表达式的非 在x等于0时,x==0表达式为真,!x==0就为假
在x不等0时,x==0表达式为假,!x==0就为真,进入if判断了!

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网