C 条件是什么;如果(n/10)“;用积分n指定?

C 条件是什么;如果(n/10)“;用积分n指定?,c,C,我正在查看以下代码: void printd(int n) { if (n < 0) { putchar('-'); n = -n; } if (n / 10) printd(n / 10); putchar(n % 10 + '0'); } void printd(int n) { if(n=0)或什么 另外,为什么要将“0”传递到putchar()调用中 有人能告诉我如果你用英语大声朗读它会

我正在查看以下代码:

void printd(int n)
{
     if (n < 0) {
         putchar('-');
         n = -n;
     }
     if (n / 10)
         printd(n / 10);
     putchar(n % 10 + '0');
}
void printd(int n)
{
if(n<0){
putchar('-');
n=-n;
}
若有(n/10)
打印件(n/10);
putchar(n%10+'0');
}
我理解第一个if语句,但第二个语句让我在几点上感到困惑

就其本身而言,因为“n”是一个整数,我知道n/10将小数点向左移动一次——有效地删除数字的最后一位;然而,我有点难以理解为什么这本身就是一个条件,而结果却不等于某个东西。为什么条件不是if((n/10)>=0)或什么

另外,为什么要将“0”传递到putchar()调用中

有人能告诉我如果你用英语大声朗读它会怎么读吗


谢谢

如果结果为0,
n/10
将计算为false,否则为true。本质上,它是检查
n>10&&n<-10
(这里由于
n=-n
代码,-10不起作用)

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

有人能告诉我如果你用英语大声朗读它会怎么读吗


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

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


关于
+'0'
,由于n%10产生一个整数结果,并且在
putchar
中打印的是
char
,因此需要将整数转换为char。这是通过将ascii值0添加到整数来实现的。

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


至于
'0'
,它只是执行字符算术,以便打印正确的字符。零字符有一个非零的ASCII编码值,因此
n
值用作该编码的偏移量,以打印出正确的数字。

在if语句条件下,零:=false,其他任何值都为true…啊,好的,因此每次都将n除以10,直到结果为0;在代码不等于零的情况下执行代码。此外,缩进在秒
if
中会产生误导<代码>putchar
不在其中。每次?这里没有循环。我猜你没有发布真正的代码。FWIW这是一种测试n>=10的可怕方式,你必须问这个问题。有时,你需要阅读C99(或C11)标准来了解
\u Bool
。并且可以保证
a>b
的计算结果为0或1(而不是其他非零值)。只是在条件下,表达式的非零值被视为真。@Jens:我从未声称
a>b
的计算结果不是0或1。我所说的是,如果为真,则为非零,这是真的,因为1不是0。它检查
n<-10
的唯一时间是if
n
INT\u MIN
输入函数时(机器使用2的补码算法)。