ビット単位とビットシフトを使用して数値をバイナリで出力する関数を作成しようとしていますが、正しく出力できません。以下は私のコードです。
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
基本的に、各ビット位置で 1 だけではなく 2^bit を出力します (たとえば、7 をバイナリに変換したい場合は、0000000...00111 ではなく 0000000...00421 になります)。これはおそらく私が見逃している些細なことですが、助けてくれる人はいますか? 私はこの20分間、これほど単純なことを理解できませんでした。