0

我只是想将一个无符号整数打印为位,但它似乎是我的代码:

void checksWithOne(unsigned int userInput)
{
   int i = 0, a = 0;

   for (i = sizeof(int)*8-1; i >= 0; i--)
   {
      a = (userInput&(1<<i));
      if (a==1)
      {
         putchar('1');
      }
      else
      {
         putchar('0');
      }
   }
   printf("\n");
}

仅当 if 语句这样更改(替换 1 和 0)时才有效:

      if (a==0)
      {
         putchar('0');
      }
      else
      {
         putchar('1');
      }

我不知道为什么会这样……有什么想法吗?

谢谢

4

2 回答 2

1

第二个代码有效,因为您打印'0'when ais == 0else '1'。因此,在第一个代码段中,if(a==1)应该是如果不是if(a)则打印(请记住 C 中的每个非零值都为真)。 1a0

事情a = (userInput & (1<<i));并不总是1,但a可以是一个零或只有一位为一的数字(例如...00010000)

于 2014-02-05T08:33:51.130 回答
1

的结果a = (userInput&(1<<i))将是1<<i0,(不是10)。所以改变:

  if (a==1)

至:

  if (a != 0)

你的代码应该可以工作。

于 2014-02-05T08:32:50.653 回答