C 为什么下面的代码不打印整数的二进制表示?
下面的代码显示所有0。我不明白。它必须根据我的逻辑正确显示。我错过了什么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);
#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;