显示二进制数的方法[C]

时间:2016-03-08 23:39:04

标签: c

不确定原因,但输出的数字是:

101101

而不是

1011010

任何想法为什么?

这是我的代码:

typedef unsigned short bitSet;

int main() {
    bitSet bits = makeBitSet();
    displayBitSet(bits);
}

bitSet makeBitSet() {
    bitSet bits = 90;
    return bits;
}

displayBitSet(bitSet bs) {
int i;
for (i = 0; i < 16; i++) {
    printf("%d", ((bs & (int)pow(2, (16-1))) >> (16-i)));
    }
}

5 个答案:

答案 0 :(得分:1)

void displayBitSet(bitSet bs) {
    for(int i = 15; i >= 0; --i)
        printf("%d", (bs >> i) & 1);
}

我不确定您为什么要使用浮点pow功能。也许我误解了这个问题?

答案 1 :(得分:0)

90 = 64 + 0 + 16 + 8 + 0 + 0 + 2 + 0     1 0 1 1 0 0 1 0

你期待的答案是9二进制,然后是10二进制。

答案 2 :(得分:0)

如果您试图显示16位,则不需要像@Clark Gaebel所说的使用pow。
如果您正在寻找参考,请查看以下链接。
该链接包含使用printf和string / char *

http://www.programmingsimplified.com/c/source-code/c-program-convert-decimal-to-binary

答案 3 :(得分:0)

我有一个笨拙但可视化的方法来解决&#34;显示二进制数的方法&#34;对于16位数。 32位是相似的。

Series

结果为enter image description here

答案 4 :(得分:-1)

Resursion可用于打印二进制数字,同时抑制前导零。

#include <stdio.h>
#include <math.h>

typedef unsigned short bitSet;

bitSet makeBitSet(void);
void displayBitSet(bitSet bs) ;

int main(void) {
    bitSet bits = makeBitSet();
    displayBitSet(bits);
    return 0;
}

bitSet makeBitSet(void) {
    bitSet bits = 90;
    return bits;
}

void displayBitSet(bitSet bs) {
    bitSet bsNext = bs >> 1;
    if (bsNext) displayBitSet(bsNext);
    printf("%d", bs & 1);
}

要指定要打印的最小数字位数,可以这样执行:

void displayBitSet2(bitSet bs, int minDigit) {
    bitSet bsNext = bs >> 1;
    int minDigitNext = (minDigit > 0 ? minDigit - 1 : 0);
    if (bsNext || minDigit > 1) displayBitSet2(bsNext, minDigitNext);
    printf("%d", bs & 1);
}

示例:displayBitSet2(0x90, 16);打印至少16位数。