将前导零添加到十进制到二进制数组C.

时间:2014-09-20 16:52:14

标签: c binary decimal zero

我将十进制转换为二进制,我需要输出为32(位?)长。这是我想要的,但我没有得到前导零,例如,输入“3”给我“11”,而不是“00000000000000000000000000000011”

    int i = 0;
    int bi[31];

    while(num > 0){
        if(num % 2 == 0)
            bi[i] = 0;
        else
            bi[i] = 1;
        i++;
        num = num / 2;
    }
    for(int j = i - 1; j >= 0; j--){
        printf("%d", bi[j]);
    }

我原本以为这就像将打印输出改为从31循环到0一样简单并打印出数组的所有内容,假设零将在我的bi []数组中的所有内容中。但这不起作用:))

由于

4 个答案:

答案 0 :(得分:2)

for(int j = 0; j < 32; j++) // this for loop is initializing all the places with zeroes
{ 
    b[j] = 0;
}
i = 31 // starting from the leftmost place of the array
while(num > 0) //as the values in the array gets updated the remaining place is left with trailing 
{
    if(num % 2 == 0)
        bi[i] = 0;
    else
        bi[i] = 1;
    i--;
    num = num / 2;
} zeroes
for(int j = 0; j < 32; j++){
    printf("%d", bi[j]);
}

答案 1 :(得分:2)

由于此问题的LIFO性质,请考虑递归(基于堆栈)解决方案:

#include <stdio.h>
#include <limits.h>

void recFoo(int num,int index)
{
    if (index > 0)
        recFoo(num/2, index-1);
    printf("%d", num%2);
}

void foo(int num)
{
    recFoo(num, sizeof(num)*CHAR_BIT);
}

答案 2 :(得分:0)

共振是因为第一个循环仅循环两次,这是输入中的最高设置位。第一个循环需要无条件地循环你想要的位数,打印循环也是如此。

答案 3 :(得分:0)

首先,你需要一个32长阵列。试试这个......初始化你的数组

void foo (int num) {
int i = 31;
int bi[32] = {0};

while(num > 0){
    if(num % 2 == 0)
        bi[i] = 0;
    else
        bi[i] = 1;
    i--;
    num = num / 2;
}
for(int j = i - 1; j >= 0; j--){
    printf("%d", bi[j]);
}