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