具有整数n的条件“if(n / 10)”指定了什么?

时间:2011-12-23 05:06:55

标签: c

我正在查看以下代码:

void printd(int n)
{
     if (n < 0) {
         putchar('-');
         n = -n;
     }
     if (n / 10)
         printd(n / 10);
     putchar(n % 10 + '0');
}

我理解第一个if语句很好,但第二个让我困惑了几点。

由于“n”是一个整数,我知道n / 10会将小数点向左移一次 - 有效地删除了数字的最后一位数;但是,我有点麻烦理解这可能是一个条件本身而不是结果等于什么。为什么不是条件if((n / 10)&gt; = 0)或什么?

另外,为什么'0'传递给putchar()调用?

有人可以告诉我,如果你用英语大声朗读它会怎么读?

谢谢!

3 个答案:

答案 0 :(得分:3)

如果结果为0,n / 10将评估为false,否则为true。基本上它正在检查n > 10 && n < -10(由于n = -n代码,-10在这里没有发挥作用)

+ '0'用于字符偏移,因为字符“0” - “9”不是由数字0-9表示,而是在偏移处(48-57表示ascii)。

  

有人可以告诉我,如果你用英语大声朗读它会怎么读?

如果你在谈论条件,那么我会说“如果整数n除以10不是零”

答案 1 :(得分:0)

n/10不会移动十进制数,因为n是一个整数。除法将产生如下结果:如果n = 25,则n/10将为2(没有任何小数点),类似地,如果n = 9,则n / 10将为0,在这种情况下{{1}条件不满意。

关于if,因为n%10产生整数结果,而+'0'中正在打印putchar,所以需要将整数转换为char。这是通过将ascii值0添加到整数来完成的。

答案 2 :(得分:0)

在C中,没有单独的布尔类型;像a > b这样的表达式如果为false则求值为零,如果为真则求值为非零。有时,当在int中测试零或非零时,您可以利用这一点。

对于'0',它只执行字符运算,以便打印正确的字符。零字符的ASCII编码值不为零,因此n值用作该编码的偏移量,以便打印出正确的数字。