私は、「sizeof() 関数を使用せずに、符号なし整数データ型のビット数を見つける」という課題を実行しようとしています。
私の設計は整数をビットに変換し、それを数えることです。例えば10 is 1010
、5 is 101
整数をビット表現に変換する次のようなものが表示されます:
do
{
Vec.push_back( x & 1 )
}
while ( x >>= 1 );
ただコピーして貼り付けるだけにはしたくありません。F-10 を使用すると、何が行われているかはわかりますが、それが何の名前なのか、どのように機能するのか (何かを比較するのか?) はわかりません。また、 「以上」(x & 1)
はわかりますが、それとは何ですか?>=
x >>= 1
注: マークされた重複は JavaScript であり、C++ ではありません。
ベストアンサー1
これらはビット演算子(参照)。
x & 1
は、 の最下位ビットに応じて1
または のいずれかの値を生成します。最後のビットが の場合、 の結果はになり、それ以外の場合は になります。これはビット単位の AND 演算です。0
x
1
x & 1
1
0
x >>= 1
は「x
1 ビット右にシフトした値に設定する」ことを意味します。式はx
シフト後の の新しい値に評価されます。
注記:符号なし型の値の場合、シフト後の最上位ビットの値はゼロになります。符号付き型の値の場合、最上位ビットはシフト前の値の符号ビットからコピーされます。サイン拡張x
したがって、が符号付き型で初期値が負の場合、ループは終了しません。