下面的代码显示全部0。我不明白它必须根据我的逻辑正确显示。我错过了什么?
#include <stdio.h>
void displayInBıtFormat(int);
int i, value;
int main(void){
puts("Enter an integer");
scanf("%d",&value);
printf("\n%d's bit representation is: ",value);
displayInBıtFormat(value);
getch();
}
void displayInBıtFormat(int val){
int mask=1<<15;
for (i = 0; i < 16; i++)
{
if (val&mask==1)
{
printf("1");
}
else
{
printf("0");
}
if ((i+1)%8==0)
{
printf(" ");
}
val<<1;
}
}
答案 0 :(得分:4)
此:
if (val&mask==1)
是错误的,按位的结果 - 当你查看位0(最低有效位)时只会为1。
将其更改为:
if (val & mask)
这就够了,完全正确。
另外,正如评论中指出的那样:
val << 1;
丢弃结果值,你需要:
val <<= 1;
答案 1 :(得分:2)
此比较val&mask==1
不正确。如果我们有i=1<<15
,那么i&mask
将不是1<<15
。请记住,按位&
将产生一个整数,在两个操作数都有1
的所有位置都有一个整数,因此结果中的一个将位于第15位。您可以将条件更改为if (val&mask != 0)
或更短if (val&mask)
。