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