我正在尝试开发一个转置函数,它可以从十进制转换为二进制数,最多可达9位数。我对编码很新,这是我的第一次尝试。但它似乎没有起作用,对不起,如果我问一些明显的东西,但我需要一些帮助。提前致谢。
void transpose(int n)
{
int c, k;
for (c = 31; c >= 0; c--)
{
k = (n % c);
if (k == 0) printf("1");
else printf("0");
}
}
答案 0 :(得分:3)
您可以使用按位运算直接获取数字,而不是使用算术运算:
for (c = 31; c >= 0; --c)
{
printf("%d", (n >> c) & 1);
}
这会将n
中的值右移c
步,即将位号c
置于最右侧(最不重要)位。然后使用1
的掩码将导致一个或零,然后打印。
答案 1 :(得分:1)
#include <stdio.h>
#include <limits.h>
void transpose(int n){
unsigned x;
char bits[CHAR_BIT * sizeof(n)+1];
char *p = bits + CHAR_BIT * sizeof(n);
*p = '\0';
for(x=n; p!=bits ;x>>=1)
*--p = "01"[x & 1];
puts(bits);
}
答案 2 :(得分:0)
调试n = 5
的程序:
当c
变为5
时,1
会在26 0
之后打印
000000000000000000000000001
现在剩余的c
(直到0
),输出为
00000000000000000000000000100000
,不幸的是,小数不是5
。希望你明白你做错了什么。
答案 3 :(得分:0)
您正在检查数字n是否可以被所有数字31到0整除。这不是您转换基数所需要做的。 其中十进制表示显示一个数字,例如,6174(kapreka常数) 能够用这些块构建:
4 * 10 ^ 0
7 * 10 ^ 1
1 * 10 ^ 3
6 * 10 ^ 4
0 * ..
0 * ..
你希望你的转置函数能够表示2的幂。我希望这有助于指导你找到答案。