在执行按位运算之前,JavaScript会将操作数转换为32位有符号整数.它还使用32位有符号整数执行操作,这意味着结果是32位有符号整数.
因为我想用32位无符号整数进行按位运算,我想知道是否有办法使用JavaScript的错误结果来找出预期的结果.
为了证明我的想法,例如,在C中,这是我想要的参考,
unsigned int a = 3774191835u;
unsigned int b = a >> 2;
/* b == 943547958 */
Run Code Online (Sandbox Code Playgroud)
在JavaScript中,
var a = 3774191835;
var b = a >> 2;
/* b == -130193866 */
Run Code Online (Sandbox Code Playgroud)
让我们尝试不同的操作.在C中,
unsigned int a = 1986735448u;
unsigned int b = a << 1;
/* b == 3973470896 */
Run Code Online (Sandbox Code Playgroud)
在JavaScript中,
var a = 1986735448;
var b = a << 1;
/* b == -321496400 */
Run Code Online (Sandbox Code Playgroud)
既然JavaScript已经使用操作数作为带符号的int来评估我的按位运算,那么我们当然会得到与C中的结果不同的结果,我们可以在无符号整数上正确执行按位运算.
我知道这是可能的,但我不确定一种方法,基本上,我可以将JavaScript的结果转换为预期的结果.
零填充右移将结果归零仅适用于第二种情况,但不适用于第一种情况.
var a = 3774191835;
var b = …Run Code Online (Sandbox Code Playgroud)