C - Печать двоичного файла для данного символа

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

Вот что у меня так далеко:

#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 bit = (1 << bit_index) & ch;

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

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

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

#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;
}    
Другие вопросы по тегам