下面的if条件是什么意思?

What is the meaning of below if condition?

我看不懂下面的if条件。如果有人知道,请帮助我理解它。

foreach(QNetworkInterface netInterface, QNetworkInterface::allInterfaces())
{
     if(!(netInterface.flags() & netInterface.IsLoopBack))
     {
          qDebug()<<netInterface.humanReadableName();
          qDebug()<<netInterface.hardwareAddress();
     }
}

首先让我们从简单的部分开始:逻辑否定运算符 !.

对于任何逻辑操作,! 反转该操作的状态。所以!truefalse!falsetrue


netInterface.IsLoopBack是单个位的值。

netInterface.flags()returns一组位。

netInterface.flags() & netInterface.IsLoopBack 检查特定位 netInterface.IsLoopBack 是否在 netInterface.flags().

返回的集合中

现在放在一起,netInterface.flags() & netInterface.IsLoopBack的结果是一个整数值。如果该位在集合中,则它是非零的。

在 C++ 中,所有非零整数值都被视为“真”。

对该值应用 ! 运算符可反转条件。

所以条件 !(netInterface.flags() & netInterface.IsLoopBack) 将是 true 是位 不是 在集合中。


最后一点上下文:循环遍历本地系统上的所有网络接口。

如果接口不是环回接口(地址127.0.0.1是环回地址),则打印接口的名称和地址。


附录:所有这些都可以通过阅读 some decent C++ books for the operators. And reading the documentation for QNetworkInterface::flags() and enum QNetworkInterface::InterfaceFlag 相对容易地理解。