2013-02-27 74 views
0

我仍然在编码所以初学者我有这个问题 我试图将整数转换成它的二进制表示使用C将整数转换为二进制表示?

#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 是什么问题和我如何解决它?

+2

您的代码段不能编译。 – timrau 2013-02-27 15:18:10

+0

其不完整我知道我只是想告诉你我的问题 – 2013-02-27 15:24:08

+0

这是一个无限循环。 – mrh 2013-02-27 15:32:10

回答

4

程序逻辑的操作是错误的,试试这个

#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; 
} 
+0

'sizeof(int)'不总是4.'CHAR_BIT'不总是8.缩进缺失。 – md5 2013-02-27 15:32:57

+0

是的,感谢您的更正 – 2013-02-27 15:38:09

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)); 
    } 
} 
+0

有没有办法可以翻转打印的句子? – 2013-02-27 15:26:14

+0

@AbdalrhmanLoulou:用数组或递归。 – md5 2013-02-27 15:26:52

+0

值为'0'的输出与递归无关。 – mrh 2013-02-27 15:31:31

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"); 
    } 
} 
相关问题