不确定原因,但输出的数字是:
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)));
}
}
答案 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)
答案 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位数。