我只是尝试将无符号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');
}
为什么那是......任何想法都超出了我的意思?
由于
答案 0 :(得分:1)
a = (userInput&(1<<i))
的结果将是1<<i
或0
,(不是1
或0
)。所以改变:
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)