如果一种语言没有"比特"比较,我该如何模拟呢?

Oli*_*ons 0 javascript

我正试图在(beta)Trackmania 2游戏中制作一个剧本.(这是JavaScript,HTML,C和......在我最糟糕的噩梦中无法想象的其他东西之间的丑陋混合).

脚本引擎似乎不知道"和"或"&&"(如果我尝试myVar && 16提出了很好的错误是"布尔操作等待一个布尔")

我想做点什么:

if (Var && 1) {
  // Bit North => trace north
}

if (Var && 2) {
  // Bit East => trace east
}
if (Var && 4) {
  // Bit South => trace south
}
if (Var && 8) {
  // Bit West => trace West
}
Run Code Online (Sandbox Code Playgroud)

如果编译器不知道位域操作,我知道如何才能做到这一点?

ike*_*ami 5

"按位和"通常是&,而不是&&.(&&通常是"逻辑和".)"Bitwise和"是&C和JavaScript,你提到的两种语言.实际上,&&对于您收到的错误消息,似乎是"逻辑"和"低音".解决方案可能只是使用

if (Var & 1)
Run Code Online (Sandbox Code Playgroud)

如果你真的没有按位操作,它仍然可以完成.请记住,4位数字可表示为:

b3 * 2**3 + b2 * 2**2 + b1 * 2**1 + b0 * 2**0
Run Code Online (Sandbox Code Playgroud)

如果你有取幂,除法,整数截断和模数,你可以使用以下内容来查看是否找出是否x设置了位:

int( i / (2**x) ) % 2
Run Code Online (Sandbox Code Playgroud)

如果没有取幂,可以用查找表替换它.

如果没有模数,i % 2可以换成( (i/2) - int(i/2) )*2