我想通过应用下面的代码在char
数组中存储二进制等效的十进制数,但问题是我无法保存十进制数的最后一位。我得到了垃圾值。
int k,j;
char c[40];
j=32;
scanf("%d",&k);
while(k)
{
k=k>>1;
c[j]=k|1;
j--;
}
puts("number is");
puts(c);
答案 0 :(得分:2)
除了@SouravGhosh注意到的问题,你需要
(5)通过添加字符'0'
的值[实际Sourav也注意到],将数字0/1转换为'1'
和'0'
的字符值,和
(6)在将k
右移1位之前选择低位。
这是一个有效的版本:
char c[40];
int j=39;
c[j--]='\0';
while(k)
{
c[j]=(k&1)+'0';
j--;
k=k>>1;
}
puts("number is ");
puts(&c[j+1]);
答案 1 :(得分:1)
我假设你想要二进制文件的词典表示法。
你需要处理好一些事情。
您必须在使用前初始化k
。询问用户输入(或“硬编码”,如我们所说)k
的值。
如果要将数组c
用作字符串,则需要对其进行空终止。
您需要使用值&
执行1
才能取出最后一位。添加'0'
(请记住,词典)。存储它。
当前的数组索引会让您遇到麻烦。从j
开始,您可以使用0
的常规数组索引。在循环之后,您需要空终止最后一个索引,然后去打印。
伪代码看起来像
#include <stdio.h>
int main(void) {
int val = 16;
char bin [128] = {0};
int index = 0;
while(val)
{
bin[index] = '0' + (val&1u);
val = val >> 1;
index++;
}
bin[index] = 0;
puts(bin);
return 0;
}
注意:您可能想要在打印之前反转字符串。
答案 2 :(得分:1)
如果有兴趣,这里的方法略有不同......
考虑到对于32位整数的图形二进制表示,您需要包含33个字节:1表示0和0,1表示字符串NULL终止符。当您遍历整数值的任何32位表示时,您可以使用输入整数值的每个位位置逻辑和(&
)2 ^ 32(2147483648)的相应位来确定该位置是否应该是a&#34; 1&#34;或者&#34; 0&#34;,堆叠1
或0
的结果字符( ASCII )表示( 48或49)当你走,成一个字符串。
以下是将整数转换为32位二进制表示的示例...
const char *byte_to_binary32(long x)
{
static char b[33]; // bits plus '\0'
b[0] = '\0';
char *p = b;
//unsigned long long z; required only if 64 bit conversion
unsigned long z;//this is sufficient for 32 bit conversion
for (z = 2147483648; z > 0; z >>= 1) //2^32
{
*p++ = (x & z) ? '1' : '0';
}
return b;
}
int main(void)
{
printf("Binary: %s\n\n", byte_to_binary32(100));
return 0;
}