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
的唯一时间是ifn
是INT\u MIN
输入函数时(机器使用2的补码算法)。