首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >putchar('0‘+num)做什么?

putchar('0‘+num)做什么?
EN

Stack Overflow用户
提问于 2014-01-21 10:10:26
回答 4查看 7K关注 0票数 8

我正在努力理解putchar('0' + r);是如何工作的。下面,函数接受一个整数并将其转换为二进制。

代码语言:javascript
复制
void to_binary(unsigned long n)
{
   int r;
   r = n % 2;
   if (n >= 2)
      to_binary(n / 2);
   putchar('0' + r);
}

我搜索了腐焦的定义,但我没有找到这个。为了测试它,我添加了一个printf来查看r的值:

代码语言:javascript
复制
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,或者发生其他事情?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-01-21 10:12:27

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

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

正如注释中指出的那样,C++和C标准都需要这个属性。C标准规定:

5.2.1-3 在源字符集和执行基本字符集中,上述十进制数字列表中0之后的每个字符的值应大于前一个字符的值。

票数 6
EN

Stack Overflow用户

发布于 2014-01-21 10:14:01

'0'表示一个以小数表示的整数,等于48,是字符0 (零)的ASCII代码。1字符的ASCII代码是49小数点。

'0' + r48 + r是一样的。当r=0时,表达式计算为48,因此输出一个0。另一方面,当r=1时,表达式计算为49,因此输出一个1。换句话说,'0' + 1 == '1'

基本上,这是一种很好的方法,可以轻松地将十进制数字转换为它们的ASCII字符表示。它也适用于字母表(即'A' + 2C相同)

票数 4
EN

Stack Overflow用户

发布于 2014-01-21 10:16:32

这是一种常用的技术,用于char .。

char a = '0' + r (0,9中的r)将根据给定的字符基将整数转换为其字符格式(在本例中为'0' ),您将得到'0'...'9'

类似地,char a = 'a' + rchar a = 'A' + r (在0,25中为r)将整数转换为其字符格式,您将得到'a'...'z''A'...'Z' (除了有不连续字母表区域的http://en.wikipedia.org/wiki/EBCDIC )。

编辑:

  1. 您也可以采取相反的方法,例如: char myChar = 'c';int b= myChar - 'a';// b为2
  2. 类似的想法用于将小写字符转换为大写字符: char myChar = 'c';char newChar = myChar - 'a‘+ 'A';// newChar将是'C’。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21255038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档