任何人都可以帮助我吗?
之间有什么区别吗?if (!n / 10)
return;
和
if (n / 10 == 0)
return;
答案 0 :(得分:8)
是的,这两个陈述是不同的。 !n / 10
相当于(!n) / 10
,n / 10 == 0
相当于!(n / 10)
运算符!
的优先级高于/
运算符的优先级,因此n
将!
首先绑定到!n / 10
。
正如@ Kerrek SB在评论中指出的那样,!n
将评估为0
或1
,因此表达式始终为false
。
答案 1 :(得分:3)
本声明
if (!n / 10)
return;
相当于
if ( ( !n ) / 10)
return;
根据operatpr(6.5.3.3一元算术运算符)的描述
5逻辑否定运算符的结果!如果值为0,则为0 它的操作数比较不等于0,1如果是其操作数的值 比较等于0.结果类型为int。表达式!E是 相当于(0 == E)。
因此,如果n等于0,则表达式( !n ) / 10
等于表达式1 / 10
,并且因为两个操作数都是整数,则结果等于0.
如果n不等于0,则表达式( !n ) / 10
等于0 / 10
,其结果再次等于0。
所以原始表达式等同于
if ( 0 ) return;
这意味着将永远执行return语句。
至于第二个陈述
if (n / 10 == 0)
return;
当n小于10时,n / 10
的结果(假设n是整数)将等于0,你将得到
if ( 0 == 0 ) return;
因此,当n
小于10
时,将执行第二个if语句中的return语句。
答案 2 :(得分:1)
你问这个是因为你可能不清楚if语句是如何工作的。所以,让我先解释一下。 if语句的语法是 if(表达式) {程序要遵循}
这里使用的表达式应该是一个逻辑的表达式,它应该导致true或false。只要表达式结果为true,就会执行if语句,反之亦然。 另一个概念是,如果表达式将导致0(false),则不会执行if语句。 现在,当你使用if(n / 10)时,对于n = 123,n / 10将导致12(该语句使用整数,因此结果)。由于它不是0,因此将其视为true,并且将执行if语句,并将根据您的代码返回n。现在n / 10不会改变n,因此将返回并打印n(= 123)。 现在让我们看看if(n / 10 == 0)。第一次当n = 123时,n / 10将是12而不等于0.因此,这里生成false并且不执行if语句与前一个不同。 根据你想要的逻辑你应该使用if(n / 10 == 0)。