以下が 1 を返す理由がわかりません。
0x0102 && (0xff << 8)
0xff私の理解では、左に 8ビットシフトすると0x00; そして、andingそれは何でも0x00になります。どこが間違っていますか?
以下が 1 を返す理由がわかりません。
0x0102 && (0xff << 8)
0xff私の理解では、左に 8ビットシフトすると0x00; そして、andingそれは何でも0x00になります。どこが間違っていますか?
logical ANDではなく、を使用していbitwise ANDます。に置き換え&&ます&。
試す
0x0102 & (0xff << 8)
私の理解では、0xff を左に 8 ビットシフトすると 0x00 になります。これを何かと AND すると、0x00 になります。どこが間違っていますか?
0xFF はint. 通常、コンパイラの設定に応じて、16 ビットまたは 32 ビットです。したがって、左に 8 ビットシフトすると、 が得られ0xFF00ます。
(0xff << 8)になります0xff00。とビット単位の AND 演算を行うと、結果0x0102が得られます0x0100(これは ですtrue)。
ただし、ビットごとの AND を実行していません。&&論理積です。&はビットごとの AND です。基本的にやっていることif 0x0102はtrueAND if (0xff << 8)is ですtrue。これは、引数がゼロ以外であるため、結果はtrue(1 に変換されます) になります。
&&論理積です。&たとえば、ビットごとの AND が必要です
0x0102 & (0xff << 8)
また、ビットごとの算術演算はバイトではなく整数であるため0xff、左に 8ビット シフトすると になります。0xff00
整数定数は、単純な 8 ビットで0xFF << 8は構成されません0xFF00。
In Cを参照左シフト (char) 0xFF を 8 ずつ int にキャスト
0xff << 8 は -256 を返します。AND 論理ゲートの両側は 0 ではないため、true または 1 を返します。