将变量右移32位时,将返回变量本身,而不是正确的结果(在这种情况下为零)。此外,大于32的任何内容都将返回原始的32-x位偏移量。使用存储的变量会发生这种情况,但是在命令中使用整数本身而不是变量时则不会发生这种情况。我尝试将对象属性保存到局部变量,并以相同的奇怪结果执行操作。 有什么想法吗?
board._current_player_board
Out[103]: 16777217
board._current_player_board >> 32
Out[104]: 16777217
16777217 >> 32
Out[105]: 0
board._current_player_board >> 31
Out[106]: 0
board._current_player_board >> 33
Out[107]: 8388608
16777217 >> 33
Out[108]: 0
16777217 >> 31
Out[109]: 0
board._current_player_board >> 34
Out[110]: 4194304
答案 0 :(得分:1)
好的,这是一个奇怪的情况。 board._current_player_board
的类型为 int,但已通过外部函数调用将其强制转换为numpy.int32。董事会对象使用的类定义位于一个甚至不导入numpy的文件中!
此处板对象的方法内有一行self._board |= self._board + (1 << 6 * move)
。对该方法进行了调用,该方法传递了numpy.int32类型进行移动,这导致self._board
转换为相同的类型,因此在移出32位时会出现问题。在将此值传递给该方法之前将其强制转换为int可以避免此问题。