(x & 1) と (x >>= 1) とは何ですか? 質問する

(x & 1) と (x >>= 1) とは何ですか? 質問する

私は、「sizeof() 関数を使用せずに、符号なし整数データ型のビット数を見つける」という課題を実行しようとしています。

私の設計は整数をビットに変換し、それを数えることです。例えば10 is 10105 is 101

整数をビット表現に変換する次のようなものが表示されます:

do
{ 
    Vec.push_back( x & 1 ) 
} 
while ( x >>= 1 );

ただコピーして貼り付けるだけにはしたくありません。F-10 を使用すると、何が行われているかはわかりますが、それが何の名前なのか、どのように機能するのか (何かを比較するのか?) はわかりません。また、 「以上」(x & 1)はわかりますが、それとは何ですか?>=x >>= 1

注: マークされた重複は JavaScript であり、C++ ではありません。

ベストアンサー1

これらはビット演算子参照)。

x & 1は、 の最下位ビットに応じて1または のいずれかの値を生成します。最後のビットが の場合、 の結果はになり、それ以外の場合は になります。これはビット単位の AND 演算です。0x1x & 110

x >>= 1は「x1 ビット右にシフトした値に設定する」ことを意味します。式はxシフト後の の新しい値に評価されます。

注記:符号なし型の値の場合、シフト後の最上位ビットの値はゼロになります。符号付き型の値の場合、最上位ビットはシフト前の値の符号ビットからコピーされます。サイン拡張xしたがって、が符号付き型で初期値が負の場合、ループは終了しません。

おすすめ記事