putchar('0'+ num)函数在C中

时间:2017-10-16 02:43:33

标签: c

考虑以下“神秘”功能:

void pb(int n)
{
  if (n != 0) 
  {
    pb(n / 2);
    putchar('0' + n % 2);
  }
}

如果我在这个函数中输入一个数字,该函数会做什么?

此外,putchar('0' + n % 2)在此功能中做了什么?

2 个答案:

答案 0 :(得分:2)

BLUEPIXY所述,函数pb()接受整数n作为参数并打印其二进制等效值。

putchar('0' + n % 2)用于打印二进制文件。

'0'会将编码值设为零(如果是ASCII,则值为48)。添加'0'1的{​​{1}}值将分别给出编码值1或0。

让我们考虑0n的示例。

10的二进制文件为10

1010

pb(10); ----> putchar('0' + 10%2); ----> 0 pb(5) ----> putchar('0' + 5%2); ----> 1 pb(2) ----> putchar('0' + 2%2); ----> 0 pb(1) ----> putchar('0' + 1%2); ----> 1 pb(0) 被递归调用,直到它的参数为pb(),并且对应于每个递归打印一个位的值。

通过这种方式,对于0,会打印出10

答案 1 :(得分:-5)

关于:

putchar('0' + n % 2);

n%2将导致0或1.

然而,' +'运营商的优先级高于'%'运算符所以这一行不会做预期的事情。

' 0'是一个字符0,实际上包含' 0x30'因此,该行应该向显示器输出0或1。

为了使其正常工作,建议使用parens,如:

putchar( '0' + (n % 2) );

关于该功能做什么

我在代码中添加了评论

void pb(int n)
{
    if (n != 0)      // check if need to perform another recursion
    {
        pb(n / 2);   // recursive call to 'pb()' 
                     // passing the 'n' parameter divided by 2.
                     // this in an integer divide, 
                     // so when the parameter is less than 2 
                     // the result will be 0
        putchar('0' + n % 2);
                     // this line will be executed 
                     // after all the following recursive calls have exited
                     // the result is:
                     // output the original 'n' value as a binary number,
                     // with the most significant bit displayed first
    }
}

注意:这个递归功能会“吃掉”。很多堆栈空间。使用简单的循环

要好得多