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

标签 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);
}

我用谷歌搜索 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");
}

然后我运行它(输入 5)并得到以下输出:

r = 1 and putchar printed 1
r = 0 and putchar printed 0
r = 1 and putchar printed 1

所以我假设 putchar('0' + r); 在 r=0 时打印 0,否则在 r=1 时打印 1,或者发生其他情况?

最佳答案

在 C 中,'0' + digit 是一种将一位整数转换为其字符表示形式(如 ASCII 或 EBCDIC)的廉价方法。例如,如果您使用 ASCII,可以将其视为将 0x30 ('0') 添加到一个数字。

一个假设是字符编码有一个连续的数字区域 - 这对 ASCII 和 EBCDIC 都适用。


正如评论中所指出的,此属性是 C++ 和 C 标准所必需的。 C 标准说:

5.2.1 - 3

In both the source and execution basic character sets, the value of each character after 0 in the above list of decimal digits shall be one greater than the value of the previous.

关于c - 什么是 putchar ('0' + num);做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21255038/

相关文章:

C预处理器#if表达式

c - ASCII 表中不带 "abs"或 "if"的 2 个字符之间的差的绝对值

c - 我使用函数 "putchar()"来打印测试结果,但我得到的却是一个问号

客户端服务器 tcp/ip 聊天室应用程序

c - 交换结构数组中的元素

c - 如何使用 getchar 和 putchar 忽略数字输入

c - K&R 练习 1-9。 Putchar 和 getchar

c - getchar() 等同于 scanf ("%c") 和 putchar() 等同于 printf ("%c") 吗?

c - 使用 C 中的 POW 函数反转五位数字

c - SSL_CTX_set_cert_verify_callback 获取链表