Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将十进制的前导零添加到二进制数组C_C_Binary_Decimal_Zero - Fatal编程技术网

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

将十进制的前导零添加到二进制数组C,c,binary,decimal,zero,C,Binary,Decimal,Zero,我正在将十进制转换为二进制,我需要输出32(位?)长。这是我想要的,但是我没有得到前导零,例如,输入“3”给我的是“11”,而不是“00000000000000000011” 我最初认为这很简单,只要将我的打印输出更改为从31向下循环到0,并打印出数组的所有内容,假设不是我的bi[]数组中的所有内容都是零。但这是行不通的:) 感谢原因是第一个循环只循环两次,这是输入中的最高设置位。第一个循环需要无条件地循环所需的位数,打印循环也需要无条件地循环。for(int j=0;j0)//当数组中的值更新

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

我最初认为这很简单,只要将我的打印输出更改为从31向下循环到0,并打印出数组的所有内容,假设不是我的bi[]数组中的所有内容都是零。但这是行不通的:)


感谢

原因是第一个循环只循环两次,这是输入中的最高设置位。第一个循环需要无条件地循环所需的位数,打印循环也需要无条件地循环。

for(int j=0;j<32;j++)//这个for循环正在用零初始化所有位置
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]);
}
{ b[j]=0; } i=31//从数组最左边开始 while(num>0)//当数组中的值更新时,剩余的位置将保留尾随 { 如果(数值%2==0) bi[i]=0; 其他的 bi[i]=1; 我--; num=num/2; }零 对于(int j=0;j<32;j++){ printf(“%d”,bi[j]); }
首先,您需要一个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]);
}

由于此问题的后进先出性质,考虑递归(基于堆栈的)解决方案:

#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);
}
#包括
#包括
void recFoo(int num,int index)
{
如果(索引>0)
recFoo(数量/2,指数-1);
printf(“%d”,数量%2);
}
void foo(int num)
{
recFoo(num,sizeof(num)*字符位);
}

如果需要32位二进制值,为什么只有31位的空间?什么是“num”?A正确地使用代码。。。。。我用31,因为这是我的第一个C类,我习惯用java制作32位数组,键入[31]。。。很明显,我认为Num是我转换成二进制的数字。下次我会更清楚。
#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);
}