为什么我不能在十进制到二进制转换中获得正确的输出?

时间:2017-01-22 01:49:24

标签: c binary

printf("Enter a positive integer");
unsigned int ip;
scanf("%d", &ip);
printf("\n Binary Conversion: ");
int c,k,count = 1;
for(c = 31; c >= 0; c--) {
    k = ip >> c;
    if(k && 1) {
        printf("1");
    } else {
        printf("0");
    }

    if(count % 8 == 0) {
        printf(" ");
    }
     count++;
}

由于某些原因,即使我也取消了取消分配,它也没有给我正确的输出。

2 个答案:

答案 0 :(得分:0)

你的问题就在这一行:

if(k && 1)

&&逻辑 AND运算符,而不是您需要使用的按位 AND运算符。它正在测试的是“如果k和1都非零,则继续”,并且1显然是多余的,因此它正在测试“如果k不为零,则继续”,这将使该语句在许多情况下成立你不想打印1的地方。

该行应写为:

if(k & 1)

您甚至可以将代码缩短为:

#include <stdio.h>

int main()
{
    unsigned int ip;
    int i;
    printf("Enter a positive integer: ");
    scanf("%d", &ip);
    printf("\nBinary Conversion: ");
    for(i = 31; i >= 0; i--)
    {
        printf("%d", (ip>>i)&1);    
        if(i%8==0) printf(" ");
    }
    return 0;
}

完全避免使用if / else

答案 1 :(得分:0)

您应该使用%u而不是使用%d。 使用&amp;而不是&amp;&amp;

printf("Enter a positive integer");
unsigned int ip;
scanf("%u", &ip);
printf("\n Binary Conversion: ");
int c,k,count = 1;
for(c = 31; c >= 0; c--) {
    k = ip >> c;
    if(k & 1) {
        printf("1");
    } else {
        printf("0");
    }

    if(count % 8 == 0) {
        printf(" ");
    }
     count++;
}