我试图了解它是如何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,否则会发生其他情况?
在C中'0' + digit是一种将单个数字整数转换为字符表示的便宜方式,如ASCII或EBCDIC.例如,如果您将ASCII其视为向'0'数字添加0x30().
一个假设是字符编码具有连续的数字区域 - 对于ASCII和EBCDIC都是如此.
正如评论中所指出的,C++和C标准都要求此属性.C标准说:
5.2.1 - 3
在源和执行基本字符集中,上述十进制数字列表中0之后的每个字符的值应比前一个值大1.