相关疑难解决方法(0)

零填充位移0有什么用呢?(a >>> 0)

我刚刚在Mozilla Javascript文档中看到了这篇文章:

var len = this.length >>> 0;  
Run Code Online (Sandbox Code Playgroud)

我不太明白为什么要这样做.有什么好处呢填零,右移this.length0呢?据我所知,它什么都没做.它是否安全地为其建立默认值len,即使this.length它不是整数?这可能是这样吗?如果是这样,>> 0和之间的区别是>>> 0什么?

javascript bitwise-operators

55
推荐指数
0
解决办法
5117
查看次数

如何在按位运算期间截断大整数以模仿Ruby中的JavaScript?

我发现在Ruby中使用整数会导致它们的二进制表示形式大于32位时,它们的行为不同于JS。

a = 144419633058839139324
b = 3903086624
Run Code Online (Sandbox Code Playgroud)

JS:

a >> 0; => 1482555392
b >> 0; => -391880672
Run Code Online (Sandbox Code Playgroud)

红宝石:

a >> 0 => 144419633058839139324
[a].pack('V').unpack('V').first => 1482560508
[b].pack('V').unpack('V').first => 3903086624
Run Code Online (Sandbox Code Playgroud)

我的问题是如何转换我的Ruby代码以提供相同的返回值JS?

javascript ruby bit-manipulation

5
推荐指数
1
解决办法
354
查看次数

两个补充相同的代码python/JavaScript不同的结果

在python 2.7中,以下代码返回正确的结果(-18027917)

from __future__ import print_function

def twos_comp(val, bits):
    if (val & (1 << (bits - 1))) != 0:
        val -= 1 << bits
     return val

valBinary = "110111011001110101001110011"
print(twos_comp(int(valBinary, 2), len(valBinary)))
Run Code Online (Sandbox Code Playgroud)

在JavaScript(Node.js)中,以下代码返回不正确的结果(1995238003)

function toTwosComplement(val, bits) {
    if ((val & (1 << (bits - 1))) != 0) {
        val -= (val - 1) << bits;
    }
    return val;
}

valBinary = "110111011001110101001110011";  // same as python example
console.log(toTwosComplement(parseInt(valBinary, 2), valBinary.length));
Run Code Online (Sandbox Code Playgroud)

显然,位运算符(或int/parseInt)的行为有所不同,但我无法看到它是什么.

javascript python node.js

0
推荐指数
1
解决办法
112
查看次数