【问题标题】:What is the meaning of below if condition?下面的if条件是什么意思?
【发布时间】:2022-01-02 21:46:56
【问题描述】:

如果条件,我无法理解以下内容。如果有人知道,请帮助我理解它。

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

【问题讨论】:

  • 您的哪一部分病情有问题?位掩码(使用&amp;)?逻辑否定(!)?
  • @Some 程序员老兄既是 &(and) 又是 !(not)。我无法理解整个情况。它的意义是什么?请帮忙

标签: qt if-statement networking loopback loopback-address


【解决方案1】:

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

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


netInterface.IsLoopBack 是单个位的值。

netInterface.flags() 返回一组位。

netInterface.flags() &amp; netInterface.IsLoopBack 检查特定位 netInterface.IsLoopBack 是否在 netInterface.flags() 返回的集合中。


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

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

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

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


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

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


附录:所有这些都可以通过阅读some decent C++ books 操作员相对容易地弄清楚。并阅读QNetworkInterface::flags()enum QNetworkInterface::InterfaceFlag 的文档。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-03-09
  • 1970-01-01
  • 1970-01-01
  • 2021-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多