什么做putchar('0'+ num); 做?

yay*_*zis 8 c putchar

我试图了解它是如何putchar('0' + r);工作的.下面,该函数采用整数并将其转换为二进制.

void to_binary(unsigned long n)
{
   int r;
   r = n % 2;
   if (n >= 2)
      to_binary(n / 2);
   putchar('0' + r);
}
Run Code Online (Sandbox Code Playgroud)

我谷歌putchar的定义,但我没有找到这个.为了测试它,我添加了一个printf来查看r的值:

void to_binary(unsigned long n)
{
   int r;
   r = n % 2;
   if (n >= 2)
      to_binary(n / 2);
   printf("r = %d and putchar printed ", r);
   putchar('0' + r);
   printf("\n");
}
Run Code Online (Sandbox Code Playgroud)

然后我运行它(键入5)并获得此输出:

r = 1并且putchar打印1
r = 0并且putchar打印0
r = 1并且putchar打印1

所以我认为putchar('0' + r); 如果r = 0 则打印0,否则如果r = 1则打印1,否则会发生其他情况?

cni*_*tar 6

在C中'0' + digit是一种将单个数字整数转换为字符表示的便宜方式,如ASCII或EBCDIC.例如,如果您将ASCII其视为向'0'数字添加0x30().

一个假设是字符编码具有连续的数字区域 - 对于ASCII和EBCDIC都是如此.


正如评论中所指出的,C++和C标准都要求此属性.C标准说:

5.2.1 - 3

在源和执行基本字符集中,上述十进制数字列表中0之后的每个字符的值应比前一个值大1.