我無法理解下面的條件。如果有人知道它,請幫助我理解它。
foreach(QNetworkInterface netInterface, QNetworkInterface::allInterfaces())
{
if(!(netInterface.flags() & netInterface.IsLoopBack))
{
qDebug()<<netInterface.humanReadableName();
qDebug()<<netInterface.hardwareAddress();
}
}
uj5u.com熱心網友回復:
首先讓我們從簡單的部分開始:邏輯否定運算子!。
對于任何邏輯操作,!反轉該操作的狀態。所以!true是false和!false是true。
netInterface.IsLoopBack 是單個位的值。
netInterface.flags() 回傳一組位。
netInterface.flags() & netInterface.IsLoopBack檢查特定位netInterface.IsLoopBack是否在由 回傳的集合中netInterface.flags()。
現在把它放在一起,結果netInterface.flags() & netInterface.IsLoopBack是一個整數值。如果該位在集合中,則它是非零的。
在 C 中,所有非零整數值都被認為是“真”。
!對這個值應用運算子會反轉條件。
所以條件!(netInterface.flags() & netInterface.IsLoopBack)將true是該位是不是在集合。
最后一點背景關系:回圈遍歷本地系統上的所有網路介面。
如果介面不是環回介面(地址127.0.0.1是環回地址),則列印介面的名稱和地址。
附錄:通過為操作員閱讀一些體面的 C 書籍,所有這些都可以相對容易地弄清楚。而閱讀的檔案QNetworkInterface::flags()和enum QNetworkInterface::InterfaceFlag。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/368572.html
