我正在努力理解putchar('0' + r);是如何工作的。下面,函数接受一个整数并将其转换为二进制。
void to_binary(unsigned long n)
{
int r;
r = n % 2;
if (n >= 2)
to_binary(n / 2);
putchar('0' + r);
}我搜索了腐焦的定义,但我没有找到这个。为了测试它,我添加了一个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
所以我假设putchar('0' + r);打印0如果r=0,否则打印1如果r=1,或者发生其他事情?
发布于 2014-01-21 10:12:27
在C语言中,'0' + digit是一种廉价的方法,可以将一个单数整数转换为它的字符表示形式,比如ASCII或EBCDIC。例如,如果使用ASCII,可以将其视为将0x30 ('0')添加到一个数字中。
一个假设是字符编码有一个连续的数字区域--这对于ASCII和EBCDIC都适用。
正如注释中指出的那样,C++和C标准都需要这个属性。C标准规定:
5.2.1-3 在源字符集和执行基本字符集中,上述十进制数字列表中0之后的每个字符的值应大于前一个字符的值。
发布于 2014-01-21 10:14:01
'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相同)
发布于 2014-01-21 10:16:32
这是一种常用的技术,用于char .。
char a = '0' + r (0,9中的r)将根据给定的字符基将整数转换为其字符格式(在本例中为'0' ),您将得到'0'...'9'
类似地,char a = 'a' + r或char a = 'A' + r (在0,25中为r)将整数转换为其字符格式,您将得到'a'...'z'或'A'...'Z' (除了有不连续字母表区域的http://en.wikipedia.org/wiki/EBCDIC )。
编辑:
https://stackoverflow.com/questions/21255038
复制相似问题