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

时间:2014-01-21 10:10:27

标签: 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并且putchar打印1
    r = 0并且putchar打印0
    r = 1并且putchar打印1

  

所以我认为如果r = 0则putchar('0' + r);打印0,否则如果r = 1则打印1,或者其他事情发生?

4 个答案:

答案 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' + r48 + r相同。当r = 0时,表达式的计算结果为48,因此输出0。另一方面,当r = 1时,表达式求值为49,因此输出1。换句话说,'0' + 1 == '1'

基本上,这是一种很容易将十进制数字转换为ASCII字符表示的好方法。它也适用于字母表(即'A' + 2C

相同

答案 2 :(得分:2)

这是用于char处理的常用技巧。

char a = '0' + r([0,9]中的r)将基于给定的char base(即本例中为'0')将整数转换为其char格式,您将获得'0'...'9'

同样,char a = 'a' + rchar a = 'A' + r([0,25]中的r)会将整数转换为其char格式,您将获得'a'...'z''A'...'Z'(< em>除EBCDIC systems之外,其中有字母不连续的区域)。


修改:

  1. 您也可以采取相反的方式,例如:

    char myChar = 'c';
    int b = myChar - 'a'; // b will be 2 
    
  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