按位运算,位的打印取决于putchar首先放在哪里......?

时间:2014-02-05 08:31:05

标签: c bit-manipulation bit putchar

我只是尝试将无符号int打印为位,但它出现在我的代码中:

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');
      }

为什么那是......任何想法都超出了我的意思?

由于

2 个答案:

答案 0 :(得分:1)

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

  if (a==1)

为:

  if (a != 0)

并且您的代码应该可以使用。

答案 1 :(得分:1)

第二个代码有效,因为您在'0' == a其他0时打印'1'。因此,在第一个代码段中,if(a==1)应该是if(a),这意味着如果1不是a则打印0(Rremember在C中每个非零值都为真) )。

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