-3

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

}
4

2 回答 2

4

这个:

if (val&mask==1)

是错误的,当您查看位 0(最低有效位)时,按位的结果只会为 1。

将其更改为:

if (val & mask)

够了,而且完全正确。

此外,正如评论中指出的那样:

val << 1;

正在丢弃结果值,您需要:

val <<= 1;
于 2013-10-30T10:05:14.337 回答
2

这种比较val&mask==1是不正确的。如果我们有i=1<<15那么i&mask将不是一个但是1<<15。请记住,按位&将产生一个整数,该整数在两个操作数都有的所有位置上都有一个整数,1因此结果中的一个将在第 15 位。您可以将条件更改为if (val&mask != 0)或更短if (val&mask)

于 2013-10-30T10:05:10.980 回答