use*_*966 2 c++ bitwise-operators
我正在阅读有关qt中openGL的一些教程.其中一个鼠标事件槽中包含以下代码:
if (event->buttons() & Qt::LeftButton) {
rotationX += 180 * dy;
rotationY += 180 * dx;
updateGL();
}
Run Code Online (Sandbox Code Playgroud)
&运算符在if语句中做了什么?它和==完全一样吗?
它不一样==.它是按位AND运算符.表达式的作用是它接受返回值event->buttons()和按位AND它的值由表示的值Qt::LeftButton.如果结果值不为零,则正在执行块.
实质上,它会检查指定的按钮Qt::LeftButton是否按下.
在bitwise AND这里使用运算符的原因是称为位掩码.这意味着返回值event->buttons()只是一个值,它的位代表不同类型的状态.这里对&-operator执行的操作是检查Qt::LeftButton返回的值中是否设置了某些位(表示为)(1)或未设置(0)event->buttons().如果未设置测试位,则返回值为零;如果设置了至少一个测试位,则返回值为非零.
关于按位运算如何工作的更多细节可以在这里找到:维基百科关于按位运算的文章