0

私はまだコーディングの初心者なので、この問題が発生しました。整数をバイナリ表現に変換しようとしています。

 #include <stdio.h>
 int main () {
   int x;
   printf("input the number\n");
   scanf("%d",&x);

   while(x!=0) {
     if (x%2)
       printf("1");
     else
       printf("0");
   }
   return 0;
 }

したがって、この12 = 0011のように出力されますが、12 = 1100問題は何で、どうすれば解決できますか?

4

3 に答える 3

6

操作のプログラム ロジックが間違っています。これを試してください

#include <stdio.h>
int main()
{
    int n, c, k;

    printf("Enter an integer in decimal number system\n");
    scanf("%d", &n);
    printf("%d in binary number system is:\n", n);

    for (c = 31; c >= 0; c--)
    {
        k = n >> c;

        if (k & 1)
            printf("1");
        else
            printf("0");
        }

        printf("\n");
    } 
    return 0;
}
于 2013-02-27T15:25:32.563 に答える
2

解決策は、再帰を使用することです。

void put_binary (unsigned int x)
{
    if (x <= 1) 
    {
        putchar('0' + x);
    }
    else
    {
        put_binary (x / 2u);
        putchar ('0' + x % 2u);
    }
}

より効率的な方法は、ビットごとの演算子を使用することです (すべての数字を出力します)。

#define GET_BIT(x, i) (((x) >> (i)) & 1)

void put_binary (unsigned int x)
{
    unsigned int max = sizeof x * CHAR_BIT;
    unsigned int i;

    for (i = 0u; i < max; i++)  
    {
        putchar ('0' + GET_BIT (x, max - i - 1u));
    }
}
于 2013-02-27T15:22:19.677 に答える
1
bool seeOne = false;
for (int i = 0; i < sizeof(int); i++)
{
  int bit = (x >> sizeof(int) - 1 - i) & 1;
  if (bit)
  { 
    print("1");
    seeOne = true;
  }
  else
  {
    if (seeOne)
      print("0");
  }
}
于 2013-02-27T15:25:29.907 に答える