为什么下面的代码不打印整数的二进制表示?

时间:2013-10-30 09:59:32

标签: c binary bit-manipulation

下面的代码显示全部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;
}

}

2 个答案:

答案 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)