Я пытаюсь создать функцию для печати числа в двоичном формате с использованием побитового и побитового сдвига, но у меня возникают проблемы с его правильной печатью. Ниже приведен мой код.
void PrintInBinary( unsigned int decNum )
{
int i = 0;
unsigned int highestOne = 1 << (sizeof(unsigned int)*8 - 1);
for( i = 0; i < sizeof(int)*8; i++ ) {
printf( "%u", decNum & (highestOne >> i) );
}
printf("\n");
}
int main()
{
unsigned int a = 128;
PrintInBinary( a );
system("PAUSE");
return 0;
}
Вывод следующий:
0000000000000000000000001280000000
По сути, он печатает 2 ^ бит, а не просто 1 в каждой битовой позиции (например, если бы я хотел преобразовать 7 в двоичный код, это было бы 0000000... 00421 вместо 0000000... 00111). Это, вероятно, что-то тривиальное, что мне не хватает, но кто-нибудь поможет, ребята? Я занимался этим последние 20 минут, не могу понять что-то настолько простое.
sizeof(int) * 8
вы можете использоватьsizeof(int) * CHAR_BIT
. - person Jerry Coffin   schedule 25.04.2012