关于C++逻辑运算符非的一些疑问。

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的时候,执行程序的时候,用户输入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.
第2个回答  2012-08-20
转换为二进制理解“!”

相关了解……

你可能感兴趣的内容

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