我在 JS 中发现了这个奇怪的问题。我有一些与棋盘游戏 api 的 native 绑定(bind),它使用位板来表示游戏状态。
我试图在 JS 中操作这些位板以在基于 Web 的 GUI(使用电子)中显示结果。
bitboard 中的 1 表示棋子的位置。下面是一个例子:

const bitboard = 0b100000010000000000000000000000000000;
但是,当我执行 bitboard >>= 1; 时,值神奇地变成了 0b1000000000000000000000000000
可运行示例:

const bitboard = 0b100000010000000000000000000000000000; // 0b is binary literal
console.log(bitboard.toString(2));
console.log((bitboard >> 1).toString(2)); // .toString(2) prints the number in binary

编辑:
相同的代码适用于 Rust,这是我在 native 端使用的语言。

最佳答案

某处可能有一个重复的漂浮物,但这里的解决方案是使用 BigInt

您只需要确保右移运算符的两个操作数是相同的类型。

const bitboard = BigInt("0b100000010000000000000000000000000000")
console.log(bitboard.toString(2))
console.log((bitboard >> 1n).toString(2)) // note "1n"

关于javascript - JS 按位移位运算符 '>>' 不返回正确的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63697853/

10-11 17:36