Python 为什么使用(按位)&;处理涉及多个键的键盘事件时?

Python 为什么使用(按位)&;处理涉及多个键的键盘事件时?,python,pygame,Python,Pygame,阅读让我想知道,如果我想检查shift键是否被按下(与另一个键同时按下),为什么我必须写下 如果event.key==K_s: 如果event.mod和KMOD\u移位: ... 特别是,虽然我完全理解为什么这个代码片段不等同于问题中的另一个,但我想知道进行位对位比较的原因是什么,这在本文中似乎有点奇怪,我们基本上只是检查两个事件是否同时发生 按下shift键时,mod的值似乎总是1,而且至少乍一看似乎没有对使用&提供任何解释 编辑:这已标记为的副本,但显然不是,因为 这是pygame特有的

阅读让我想知道,如果我想检查shift键是否被按下(与另一个键同时按下),为什么我必须写下

如果event.key==K_s:
如果event.mod和KMOD\u移位:
...
特别是,虽然我完全理解为什么这个代码片段不等同于问题中的另一个,但我想知道进行位对位比较的原因是什么,这在本文中似乎有点奇怪,我们基本上只是检查两个事件是否同时发生

按下shift键时,
mod
的值似乎总是1,而且至少乍一看似乎没有对使用
&
提供任何解释

编辑:这已标记为的副本,但显然不是,因为

  • 这是pygame特有的
  • 我已经看了一眼,它根本没有我得到的答案那么有用,因为答案主要涉及问题的更多理论方面
    • 请参见:

      键盘还有一个修改器状态列表(来自pygame.localspygame常量),可以通过按位将它们组合在一起

      修饰符状态(
      KMOD\u LSHIFT
      KMOD\u RSHIFT
      KMOD\u LCTRL
      KMOD\u RCTRL
      ,…)由单个位表示。状态编码在
      event.mod
      中。由于多个状态可以同时为
      True
      ,因此可以同时设置
      event.mod
      的多个位。因此,您需要使用二进制AND(
      &
      )运算符来屏蔽位

      KMOD\u换档
      状态是
      KMOD\u换档
      KMOD\u换档
      状态的组合(或)。这意味着
      KMOD\u SHIFT
      KMOD\u LSHIFT | KMOD\u RSHIFT
      相同

      因此情况就是这样

      如果event.mod和KMOD\u移位:
      

      如果event.mod&(KMOD_LSHIFT | KMOD_RSHIFT):
      
      同:

      if(event.mod&KMOD\u LSHIFT)或(event.mod&KMOD\u RSHIFT):
      
      请参见:

      键盘还有一个修改器状态列表(来自pygame.localspygame常量),可以通过按位将它们组合在一起

      修饰符状态(
      KMOD\u LSHIFT
      KMOD\u RSHIFT
      KMOD\u LCTRL
      KMOD\u RCTRL
      ,…)由单个位表示。状态编码在
      event.mod
      中。由于多个状态可以同时为
      True
      ,因此可以同时设置
      event.mod
      的多个位。因此,您需要使用二进制AND(
      &
      )运算符来屏蔽位

      KMOD\u换档
      状态是
      KMOD\u换档
      KMOD\u换档
      状态的组合(或)。这意味着
      KMOD\u SHIFT
      KMOD\u LSHIFT | KMOD\u RSHIFT
      相同

      因此情况就是这样

      如果event.mod和KMOD\u移位:
      

      如果event.mod&(KMOD_LSHIFT | KMOD_RSHIFT):
      
      同:

      if(event.mod&KMOD\u LSHIFT)或(event.mod&KMOD\u RSHIFT):
      
      我明白了!回答得很好,现在我明白了为什么它有意义(感谢@Carcigenicate的评论,我已经理解了这一点)以及为什么它是必要的。谢谢!我懂了!回答得很好,现在我明白了为什么它有意义(感谢@Carcigenicate的评论,我已经理解了这一点)以及为什么它是必要的。谢谢!从链接副本的第二个答案开始:“&用于测试或清除某个位”。在本例中,它正在测试
      事件中的
      KMOD\u移位
      位是1还是0。mod
      @kaya3是的,我知道这两个问题是如何关联的,但我的问题更多的是关于pygame为什么这样做,而不是关于它本身。从链接副本的第二个答案来看:“&用于测试或清除某个位”。在本例中,它正在测试
      事件中的
      KMOD\u移位
      位是1还是0。mod
      @kaya3是的,我知道这两个问题是如何关联的,但我的问题更多的是关于pygame为什么这样做,而不是它本身。