1

以下が 1 を返す理由がわかりません。

0x0102 && (0xff << 8)

0xff私の理解では、左に 8ビットシフトすると0x00; そして、andingそれは何でも0x00になります。どこが間違っていますか?

4

5 に答える 5

3

logical ANDではなく、を使用していbitwise ANDます。に置き換え&&ます&

試す

0x0102 & (0xff << 8)

私の理解では、0xff を左に 8 ビットシフトすると 0x00 になります。これを何かと AND すると、0x00 になります。どこが間違っていますか?

0xFF はint. 通常、コンパイラの設定に応じて、16 ビットまたは 32 ビットです。したがって、左に 8 ビットシフトすると、 が得られ0xFF00ます。

于 2013-02-06T01:11:15.353 に答える
3

(0xff << 8)になります0xff00。とビット単位の AND 演算を行うと、結果0x0102が得られます0x0100(これは ですtrue)。

ただし、ビットごとの AND を実行していません。&&論理積です。&はビットごとの AND です。基本的にやっていることif 0x0102trueAND if (0xff << 8)is ですtrue。これは、引数がゼロ以外であるため、結果はtrue(1 に変換されます) になります。

于 2013-02-06T01:11:33.970 に答える
2

&&論理積です。&たとえば、ビットごとの AND が必要です

0x0102 & (0xff << 8)

また、ビットごとの算術演算はバイトではなく整数であるため0xff、左に 8ビット シフトすると になります。0xff00

于 2013-02-06T01:10:56.680 に答える
1

整数定数は、単純な 8 ビットで0xFF << 8は構成されません0xFF00

于 2013-02-06T01:12:06.547 に答える
0

In Cを参照左シフト (char) 0xFF を 8 ずつ int にキャスト

0xff << 8 は -256 を返します。AND 論理ゲートの両側は 0 ではないため、true または 1 を返します。

于 2013-02-06T01:17:03.993 に答える