2016-01-24 125 views

回答

8

是的,两种说法都不同任何区别。 !n/10相当于(!n)/10n/10 == 0相当于!(n/10)
运营商!优先于/运营商的优先级,因此n将首先绑定到!!n/10

正如@Kerrek SB在他的评论中指出,!n将评估要么01所以,表达永远是false

+1

算术转换后''(!n)'是0或1,所以表达式总是为false。 –

0

你在问这个,因为也许你不清楚如果声明是如何工作的。所以,让我先解释一下。 如果语句的语法是 如果(表达式) {过程遵循}

这里表达中使用应该是逻辑一,它应导致真或假。只要表达式导致为真,就会执行if语句,反之亦然。 另一个概念是,如果表达式将导致0(false),那么if语句将不会被执行。 现在当你使用if(n/10)时,对于n = 123,n/10将导致12(语句使用整数,因此结果)。由于它不是0,它被视为一个真实的,if语句将执行并且n将根据您的代码返回。现在n/10不会改变n,因此n(= 123)将被返回并打印。 现在我们来看看if(n/10 == 0)。当n = 123时,n/10第一次将是12,这不等于0.所以,这里产生一个错误,if语句不会像前一个那样执行。 根据你想要的逻辑,你应该使用if(n/10 == 0)。

+0

谢谢你,我明白了 –

3

此语句

if (!n/10) 
    return; 

相当于

if ((!n)/10) 
    return; 

按照operatpr的描述(6.5.3.3目算术运算符)

5逻辑的结果否定操作符!如果 的操作数不等于0,则其值为0,如果其操作数 的值等于0,则值为1.结果的类型为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语句将被执行。

相关问题