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

Strange behavior of Boolean type in c++

本文关键字:布尔 类型 c++      更新时间:2023-10-16

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

奇怪的是,当我试图计算(~B)的值时,它显示的值是2。(即当B = 1时)。

为什么会发生这种情况?

确定你想要什么

~是位运算符,用于翻转所有位。

!是"NOT"的逻辑运算符。

将~B改为!B。希望能行

c++中的波浪号(~)是位NOT操作符。这与逻辑非操作符(!)不同。

~B并不总是等于!B