可能重复:
Is there a printf converter to print in binary format?
考虑这个小型C应用程序
int main () {
int bits = 100 >> 3;
printf("bits => %d", bits);
return 0;
}
如何打印bits
变量,以便将其视为二进制值(位清楚移位),例如00001100
?
我也在学习,所以请随意纠正任何术语。
答案 0 :(得分:3)
这应该有效(未经测试):
#define PRINT_BITS 7
void printbits(int input){
int i, mask;
for(i=PRINT_BITS; i >= 0; i--){
mask = 1 << i;
if(input & mask){
printf("1");
}else{
printf("0");
}
}
}
答案 1 :(得分:2)
您必须一次提取一位。类似于以下内容
int main() {
int bits = 100 >> 3;
for (int bit = 7; bit >= 0; --bit)
printf("%d", (number & (1 << bit)) == 1);
printf("\n");
return 0;
}
答案 2 :(得分:2)
有经验的程序员通常会以十六进制格式输出值(格式字符串中为"%x"
),因为十六进制数字与每组四个二进制位之间存在简单的对应关系:
Hex Binary
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
A 1010
B 1011
C 1100
D 1101
E 1110
F 1111
将此表提交到内存中会很好。
答案 3 :(得分:1)
您需要一次提取一个位并将其打印到屏幕上。这是一个简单的功能
void printBits(int value) {
int bits = sizeof(int)*8;
int mask = 1 << (bits-1);
while ( bits > 0 ) {
putchar((mask & value) ? '1' : '0');
bits--;
}
}
答案 4 :(得分:0)
试试这个:
int number = 0xEC;
for (int bit = 128; bit != 0; bit >>= 1) printf("%d", !!(number & bit));
如果你想避免printf
函数的繁重运行时,只需使用putchar:
putchar(!!(number & bit) + '0');