转置函数,十进制到二进制

时间:2014-02-06 13:43:15

标签: c binary

我正在尝试开发一个转置函数,它可以从十进制转换为二进制数,最多可达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");
}
}

4 个答案:

答案 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的幂。我希望这有助于指导你找到答案。