在 JavaScript 中从 VBScript 模拟 Eqv 和 Imp
Simulate Eqv and Imp from VBScript in JavaScript
我正在实现 VBScript 方言并希望同样支持 VBScript Eqv
(logical equivalence) and Imp
(逻辑含义)。
当Eqv
/Imp
有数字操作数时,它们执行按位比较。虽然我可以一点一点地模拟他们的行为,但肯定有比这更有效的方法。例如,给定两个整数 x 和 y:[=19,我可以像这样从 JavaScript 做 Eqv
=]
let bit1 = x & 1 == 0 ? (y & 1 == 0 ? 1 : 0) : y & 1 == 0 ? 0 : 1;
let r = bit1 | otherBits;
这样,对于整数,我需要为每 32 位应用一次。有没有办法只用 JavaScript 中的一些 & | ^
运算符来做到这一点?
从他们的位表来看,Eqv
似乎是“非异或”,Imp
“不是 a 或 b”
a = 0b0011
b = 0b0101
console.log(( ~(a^b) ).toString(2))
console.log(( ~a|b ).toString(2))
我正在实现 VBScript 方言并希望同样支持 VBScript Eqv
(logical equivalence) and Imp
(逻辑含义)。
当Eqv
/Imp
有数字操作数时,它们执行按位比较。虽然我可以一点一点地模拟他们的行为,但肯定有比这更有效的方法。例如,给定两个整数 x 和 y:[=19,我可以像这样从 JavaScript 做 Eqv
=]
let bit1 = x & 1 == 0 ? (y & 1 == 0 ? 1 : 0) : y & 1 == 0 ? 0 : 1;
let r = bit1 | otherBits;
这样,对于整数,我需要为每 32 位应用一次。有没有办法只用 JavaScript 中的一些 & | ^
运算符来做到这一点?
从他们的位表来看,Eqv
似乎是“非异或”,Imp
“不是 a 或 b”
a = 0b0011
b = 0b0101
console.log(( ~(a^b) ).toString(2))
console.log(( ~a|b ).toString(2))