int a;
cout<<"请输入一个数:\n";
cin>>a;
if (!a==0)
cout<<"a不等于0\n";
else
cout<<"a等于0\n";
上面这段程序把其中的a==0的0改成其他任意数字,那个!就不起任何作用了,这是怎么回事????
做逻辑运算以后的结果要么是1,要么是0.。。
所以改成1还是有“正常”结果的,
但是改成其他的就活总是一样的追问
所以改成1还是有“正常”结果的,
但是改成其他的就活总是一样的追问
改成1的时候,执行程序的时候,用户输入2就不正常了,就像非逻辑运算符不起作用一样。。。只有输入0的时候才起作用。。。。这是怎么回事啊,这样的话非运算符不是没什么用处了。
追答有么。。。我的执行很正常啊。。。
不正常啊。。你输入的是2,他不等于1,而其面用了非,所以应该返回真,执行a不等于0才对啊,不然你试试让真的语句输出看看,输入任何数字都没办法让真的那条语句输出。。。
是你理解错了。。。
提示语神码的都是浮云。。。
我们按照你的程序走一遍,输入了a ( == 2)
首先!的优先级高于 == ,所以先求!a的值,因为a非0,所以!a的值是0.
,所以(!a == 2)真值为0
所以执行else里的
------------------------------------------华丽的分割线----------------------------------------
刚才说过了,如果 == 右边改成非0非1的数,结果会是固定的,因为:
!a要么是0,要么是1,所以(!a == 2)真值恒为0,所以总是执行else里的语句
温馨提示:答案为网友推荐,仅供参考
第1个回答 2012-08-20
!(a==0),(!a)==0和!a==0,a,都是相互等价的,if (!a==0)
cout<<"a不等于0\n";相当于if(a) cout<<"a不等于0\n";;
至于改成其他数字首先明确当a为!0时,!a为0,为0时!a为1,仅此两种情况。
所以改成1,,则只有a为0时成立,!a(0)等于1.
改为其他非零数,则恒不成立,因为!a只能为0或1.
cout<<"a不等于0\n";相当于if(a) cout<<"a不等于0\n";;
至于改成其他数字首先明确当a为!0时,!a为0,为0时!a为1,仅此两种情况。
所以改成1,,则只有a为0时成立,!a(0)等于1.
改为其他非零数,则恒不成立,因为!a只能为0或1.
第2个回答 2012-08-20
转换为二进制理解“!”