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;
}