相关疑难解决方法(0)

按位运算符的真实世界用例

以下按位运算符的一些实际用例是什么?

  • XOR
  • 要么

language-agnostic bitwise-operators

217
推荐指数
17
解决办法
8万
查看次数

为什么某些情况需要使用"按位"运算符而不是"逻辑"/"相等"运算符?

有一天,我试图使用SDL多媒体库编写一个小型C++编程,然后我遇到了这个小麻烦,我最终通过反复试验解决了这个问题.问题是,我理解我为解决问题所做的工作,但我并不了解问题的本质!

问题在于SDL中的键盘事件处理.处理单键按下以退出程序的代码是直截了当且简单的.[eventQueue是一个SDL_Event结构]

//checks for keypress events..
if ( eventQueue.type == SDL_KEYDOWN )
{ 
    //note: uses the boolean logical '==' equals operator..
    if ( eventQueue.key.keysym.sym == SDLK_ESCAPE )
    {
        running = false;
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,只需按下ESCAPE键就可以结束主循环并导致程序清理和关闭......

但是...处理使用修饰键(shift/alt/ctrl)的按键所需的代码与'=='运算符无法正常工作.我花了很长时间才发现我需要使用按位AND运算符而不是相等(逻辑?)运算符.

//checks for keypress events..
if ( eventQueue.type == SDL_KEYDOWN )
{ 
    //note: requires the use of the bitwise AND operator..
    if (( eventQueue.key.keysym.mod & KMOD_ALT ) && (eventQueue.key.keysym.sym == SDLK_F4 ))
    {
        running = false;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的困惑来自这样一个事实:当使用'keysym.sym'成员时,逻辑运算符'=='工作正常,但是,当使用'keysym.mod'成员时,有必要使用'&'按位AND运算符.

现在,如果我不得不猜测,我会说它与'keysym.sym'只需要处理一个代表键盘上单个键的数字值这一事实有关,而'keysym.mod'有处理shift,ctrl和alt键的各种组合......?

总结一下我的问题: …

c++ boolean-logic sdl event-handling bitwise-operators

3
推荐指数
1
解决办法
512
查看次数