下面的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();
}
}
首先让我们从简单的部分开始:逻辑否定运算符 !
.
对于任何逻辑操作,!
反转该操作的状态。所以!true
是false
,!false
是true
。
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
相对容易地理解。
我看不懂下面的if条件。如果有人知道,请帮助我理解它。
foreach(QNetworkInterface netInterface, QNetworkInterface::allInterfaces())
{
if(!(netInterface.flags() & netInterface.IsLoopBack))
{
qDebug()<<netInterface.humanReadableName();
qDebug()<<netInterface.hardwareAddress();
}
}
首先让我们从简单的部分开始:逻辑否定运算符 !
.
对于任何逻辑操作,!
反转该操作的状态。所以!true
是false
,!false
是true
。
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
相对容易地理解。