布尔类型在c ++中的奇怪行为

时间:2012-12-28 18:45:50

标签: c++

我的代码中有以下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为真,也会评估if语句(=> ~B为假) 我在循环执行时检查了B的值。 我得到B = 1;

奇怪的是,当我尝试cout(~B)的值时,它显示值为2.(即当B = 1时)。

为什么会这样?

3 个答案:

答案 0 :(得分:5)

确保你知道自己想要什么。

~是位操作符,用于翻转所有位。

!是“NOT”的逻辑运算符。

答案 1 :(得分:1)

将~B改为!B。  这应该有希望工作

答案 2 :(得分:1)

C ++中的波浪号(〜)是Bitwise NOT Operator。这与Logical NOT Operator(!)不同。

~B并不总是等于!B