一些数据存储在 64 位整数中。如您所见,在getDrvAns
函数内部,我检查该位置的位 drvIdx-1
是否为0
或1
。人们无法确定drvIdx
将有一个正确范围内的值(1-64)。但是,我注意到,如果我们将值设置为高于 64,则会产生环绕效果,如下面的代码所示。
我的问题是,这是标准行为吗?在没有边界检查的情况下保持原样是否安全?
注意:如果该位设置为0
驱动器已应答。
uint64_t mDrvAns = 48822;
bool getDrvAns(int drvIdx) {
std::bitset<64> bitRepOfmDrvAns{mDrvAns};
return (bitRepOfmDrvAns[drvIdx - 1] != 0ull);
};
std::string yesOrNo(bool val) {
return ((val==false) ? "Yes" : "No");
}
int main()
{
int drvIdx = 1;
std::bitset<64> bitsOfDrvAns{mDrvAns};
std::cout << bitsOfDrvAns << std::endl;
std::cout << "Has drv " << drvIdx << " answered? " << yesOrNo(getDrvAns(drvIdx))
<< std::endl;
drvIdx = 65;
std::cout << "Has drv " << drvIdx << " answered? " << yesOrNo(getDrvAns(drvIdx))
<< std::endl;
return 0;
}