2010-08-21 56 views

回答

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"); 
     } 
    } 
} 
+0

它確實有效! :)謝謝 – alex 2010-08-21 04:08:05

2

您必須一次提取一個位。像下面

int main() { 
    int bits = 100 >> 3; 
    for (int bit = 7; bit >= 0; --bit) 
    printf("%d", (number & (1 << bit)) == 1); 
    printf("\n"); 
    return 0; 
} 
+1

這是不是打印的位以相反的順序? – Timwi 2010-08-21 03:55:55

+0

確實。謝謝你的收穫。修復。 – torak 2010-08-21 03:57:54

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 

將此表提交到內存會很好。

+0

是啊有很少的理由使用直二進制它是太多的數字 – 2010-08-21 04:18:28

1

您需要一次提取一個位並將它們打印到屏幕上。這裏有一個簡單的函數

void printBits(int value) { 
    int bits = sizeof(int)*8; 
    int mask = 1 << (bits-1); 
    while (bits > 0) { 
    putchar((mask & value) ? '1' : '0'); 
    bits--; 
    } 
} 
0

試試這個:

int number = 0xEC; 
for (int bit = 128; bit != 0; bit >>= 1) printf("%d", !!(number & bit)); 

如果你想避免printf功能的重運行時,只要使用的putchar:

putchar(!!(number & bit) + '0');