整数を同等のバイナリ表現に変換しようとしていました。
次のアルゴリズムを使用していました
void decimal_to_binary(uint32_t number)
{
char bitset[32];
for(uint32_t i=0; i<32; ++i)
{
if((number & (1 << i)) != 0)
{
bitset[31-i] = '1';
}
else
{
bitset[31-i] = '0';
}
}
for(uint32_t i=0; i<32; ++i)
{
cout << bitset[i];
}
cout << "\n";
}
たとえば、 uint32_t として宣言された「5」に対してこの関数を実行すると、正しい結果が得られます
decimal_to_binary(5)
00000000000000000000000000000101
しかし、数値を uint64_t として宣言し、ビットセットのサイズを 64 ビットに変更すると、結果はまったく異なります
同じことをするコードを追加する
void decimal_to_binary(uint64_t number)
{
char bitset[64];
for(uint64_t i=0; i<64; ++i)
{
if((number & (1 << i)) != 0)
{
bitset[63-i] = '1';
}
else
{
bitset[63-i] = '0';
}
}
for(uint64_t i=0; i<64; ++i)
{
cout << bitset[i];
}
cout << "\n";
}
decimal_to_binary(5)
0000000000000000000000000000010100000000000000000000000000000101
uint32 で取得した結果と同じ結果が表示されますが、一方が他方の横に配置されています。
これは、uint64_t が CPP のようなプログラミング言語でどのように実装されているのか疑問に思いました??
stdintヘッダー ファイルを調べて詳細を取得しようとしましたが、そこにあるリンクが非常に役立ちました。
お時間をいただきありがとうございます。