1

コードに次の if ステートメントがあります。

~(( APQState  == dot11->tempState[0] ) &&
  ( STAQState == dot11->tempState[1] ) &&
  ( tempk1    == dot11->tempState[2] ) &&
  ( tempk2    == dot11->tempState[3] ) &&
  ( tempk3    == dot11->tempState[4] ))

ブール変数としましょう、

B = ( APQState  == dot11->tempState[0] ) &&
    ( STAQState == dot11->tempState[1] ) &&
    ( tempk1    == dot11->tempState[2] ) &&
    ( tempk2    == dot11->tempState[3] ) &&
    ( tempk3    = =dot11->tempState[4] )

B が true ( => ~B が false) の場合でも、if ステートメントが評価されています。
実行時にループ内の B の値を確認しました。私は B=1 を得ます;

(~B ) の値を計算しようとすると、奇妙なことに 2 の値が表示されます (つまり、B = 1 の場合)。

なぜこうなった?

4

3 に答える 3

5

自分が何を望んでいるのかを確認してください。

~ すべてのビットを反転するビット演算子です。

!「NOT」の論理演算子です。

于 2012-12-28T18:49:54.280 に答える
1

~B を !B に変更します。うまくいけばうまくいくはずです

于 2012-12-28T18:50:34.343 に答える
1

C++ のチルダ (~) はビット単位の NOT 演算子です。これは論理否定演算子 (!) とは異なります。

~B常に等しいとは限らない!B

于 2012-12-28T18:52:29.057 に答える