如何在C中查看字节的位?

时间:2010-08-21 03:49:20

标签: c

  

可能重复:
  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

我也在学习,所以请随意纠正任何术语。

5 个答案:

答案 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');