if(!n / 10)返回之间有什么区别;如果(n / 10 == 0)返回;?

时间:2016-01-24 16:03:03

标签: c

任何人都可以帮助我吗?

之间有什么区别吗?
if (!n / 10)
    return; 

if (n / 10 == 0) 
   return;

3 个答案:

答案 0 :(得分:8)

是的,这两个陈述是不同的。 !n / 10相当于(!n) / 10n / 10 == 0相当于!(n / 10) 运算符!的优先级高于/运算符的优先级,因此n!首先绑定到!n / 10

正如@ Kerrek SB在评论中指出的那样,!n将评估为01,因此表达式始终为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)。