我想了解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并且putchar打印1
r = 0并且putchar打印0
r = 1并且putchar打印1
所以我认为如果r = 0则putchar('0' + r);
打印0,否则如果r = 1则打印1,或者其他事情发生?
答案 0 :(得分:6)
在C '0' + digit
中,将单个数字整数转换为字符表示形式(如ASCII或EBCDIC)是一种廉价的方法。例如,如果您使用ASCII
将其视为向数字添加0x30('0'
)。
一个假设是字符编码具有连续的数字区域 - 对于ASCII和EBCDIC都是如此。
正如评论中所指出的,C ++和C标准都要求此属性。 C标准说:
5.2.1 - 3
在源和执行基本字符集中,值都是 上面的十进制数字列表中的每个字符后面的0应为 比前一个值大一个。
答案 1 :(得分:3)
'0'
表示十进制等于48的整数,是字符0
(零)的ASCII码。 1
字符的ASCII码为十进制49。
'0' + r
与48 + r
相同。当r = 0时,表达式的计算结果为48,因此输出0
。另一方面,当r = 1时,表达式求值为49,因此输出1
。换句话说,'0' + 1 == '1'
基本上,这是一种很容易将十进制数字转换为ASCII字符表示的好方法。它也适用于字母表(即'A' + 2
与C
)
答案 2 :(得分:2)
这是用于char
处理的常用技巧。
char a = '0' + r
([0,9]中的r)将基于给定的char base(即本例中为'0'
)将整数转换为其char格式,您将获得'0'...'9'
同样,char a = 'a' + r
或char a = 'A' + r
([0,25]中的r)会将整数转换为其char格式,您将获得'a'...'z'
或'A'...'Z'
(< em>除EBCDIC systems之外,其中有字母不连续的区域)。
修改:
您也可以采取相反的方式,例如:
char myChar = 'c';
int b = myChar - 'a'; // b will be 2
类似的想法用于将小写字母转换为大写:
char myChar = 'c';
char newChar = myChar - 'a' + 'A'; // newChar will be 'C'
答案 3 :(得分:0)
U正在添加数字的ASCII值 说“0”ASCII值是48
'1' - &gt; 49,依此类推CHECK HERE FOR COMPLETE TABLE
所以当你添加一个到48它将49和putchar functuion打印发送给它的字符。当你做的时候
putchar('0' + r )
如果r = 1 putchar(48 + 1)(转换为ASCII值)
putchar(49),即1