我还是编码的初学者,所以我遇到了这个问题 我正在尝试将整数转换为其二进制表示
#include <stdio.h>
int main () {
int x;
printf("input the number\n");
scanf("%d",&x);
while(x!=0) {
if (x%2)
printf("1");
else
printf("0");
}
return 0;
}
所以输出像12 = 0011但12 = 1100 有什么问题,如何解决?
答案 0 :(得分:4)
操作的程序逻辑错误,请尝试此操作
#include <stdio.h>
int main()
{
int n, c, k;
printf("Enter an integer in decimal number system\n");
scanf("%d", &n);
printf("%d in binary number system is:\n", n);
for (c = 31; c >= 0; c--)
{
k = n >> c;
if (k & 1)
printf("1");
else
printf("0");
}
printf("\n");
}
return 0;
}
答案 1 :(得分:2)
解决方案是使用递归。
void put_binary (unsigned int x)
{
if (x <= 1)
{
putchar('0' + x);
}
else
{
put_binary (x / 2u);
putchar ('0' + x % 2u);
}
}
使用按位运算符的更有效方法(它打印每个数字)。
#define GET_BIT(x, i) (((x) >> (i)) & 1)
void put_binary (unsigned int x)
{
unsigned int max = sizeof x * CHAR_BIT;
unsigned int i;
for (i = 0u; i < max; i++)
{
putchar ('0' + GET_BIT (x, max - i - 1u));
}
}
答案 2 :(得分:1)
bool seeOne = false;
for (int i = 0; i < sizeof(int); i++)
{
int bit = (x >> sizeof(int) - 1 - i) & 1;
if (bit)
{
print("1");
seeOne = true;
}
else
{
if (seeOne)
print("0");
}
}