2014-09-09 2 views
1

Я изучаю C, и часть моего упражнения имеет дело с побитовыми операторами. Я пытаюсь создать функцию, которая выводит дополнение 2 для ввода char.C - Печать двоичного файла для заданного символа

Вот то, что я до сих пор:

#include <stdio.h> 
#include <stdlib.h> 

void find_binary(char ch) { 

     long bit_index = 0; 
     unsigned long sz = sizeof(ch)*8-1; 
     for (bit_index = 0; bit_index <= sz; ++bit_index) { 
       int bit = (1 << bit_index) & ch; 
       printf("%d", bit); 
     } 
     printf("\n"); 
} 

Вот результат: 0008032640 когда вход 'h'.

Почему это целые числа печати, отличные от 0 и 1?

+2

Поскольку вы печатаете 'Int 's, которые имеют значения, отличные от' 0' или '1'. – juanchopanza

+0

Хм, так не из-за логической ошибки? – mrQWERTY

+0

Вы печатаете значение каждого бита как int вместо 1 или 0. –

ответ

6

Выражение

int bit = (1 << bit_index) & ch; 

производит ноль или степень двойки с соответствующим битом. Для того, чтобы привести его в диапазоне 0..1, либо сдвиг ch право и маску с 1, или преобразовать выражение следующим образом:

int bit = ((1 << bit_index) & ch) != 0; 
+0

О, я вижу, спасибо. – mrQWERTY

2

Попробуйте следующий код

#include <stdio.h> 
#include <limits.h> 

void find_binary(char ch) 
{ 
    for (int i = CHAR_BIT; i != 0;) 
    { 
     int bit = (1 << --i & ch) != 0; 
     printf("%d", bit); 
    } 
} 

int main(void) 
{ 
    find_binary('A'); 

    return 0; 
}  
Смежные вопросы