程序在不使用格式说明符的情况下打印数字的二进制等效项

Laz*_*Laz 1 c

Jus检查这个程序.从逻辑上看它看起来很好,但它为所有东西提供了000000000000000000000

#include<stdio.h>
void main()
{
  int n=25,k=32;
  printf("binary equivalent\n");
  while(k!=0)
  {
    if((n>>1&0x01)!=0)
      printf("1");
    else
     printf("0");
    k--;
  }
}
Run Code Online (Sandbox Code Playgroud)

Ano*_*on. 7

你永远不会改变n.

不要试图将所有东西塞进一行,更加冗长,以便更清楚.

while(k!=0)
{
 if((n & 0x01) != 0)
  printf("1");
 else
  printf("0");
 k--;
 n >>= 1;
}
Run Code Online (Sandbox Code Playgroud)


小智 5

那是因为你没有改变n.

对于n = 25,我们有(n >> 1)= 12因此它打印为零.而且由于你没有改变n,它为所有k打印零.

您可以通过以下方式更改它:

#include
void main()
{
int n=25,k=32;
printf("binary equivalent\n");
while(k!=0)
{
 if((n & 0x01)!=0)
  printf("1");
 else
  printf("0");
 k--;
 n = n >> 1;
}
}

但是它会以反向形式打印二进制表示.