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

C 为什么下面的代码不打印整数的二进制表示?,c,binary,bit-manipulation,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);

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

}
#包括
无效显示格式(int);
int i,值;
内部主(空){
放入(“输入整数”);
scanf(“%d”,和值);
printf(“\n%d的位表示为:”,值);
显示格式(值);
getch();
}
无效显示格式(int val){

int mask=1这个比较
val&mask==1
是不正确的。如果我们有
i=1这个:

如果是错误的,则按位and的结果仅在查看位0(最低有效位)时为1

将其更改为:

if (val & mask)
这就够了,完全正确

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

val << 1;

val尝试
if(val&mask)
没有与1的相等比较。在任何情况下,
0x1000&
都不会等于1。充其量它将是0x1000,所以自然所有的零都会被打印出来。我感到很尴尬。谢谢分配
valah也很有用。谢谢。这也是一个很大的错误。现在程序正在运行。感谢所有回复者。
val << 1;
val <<= 1;