Python >>运算符返回的输出与JavaScript >>> [duplicate]

问题描述 投票:0回答:1

此问题已经在这里有了答案:

a = -506298134 
d = 6
d = a >> d & 0xFFFFFFFF
d = twos_comp(d, 32)

def twos_comp(val, bits):
    """compute the 2's complement of int value val"""
    if (val & (1 << (bits - 1))) != 0: # if sign bit is set e.g., 8bit: 128-255
        val = val - (1 << bits)        # compute negative value
    return val

d在-7910909之后返回我

使用Javascript

a = -506298134 
d = 6
d = a >>> d & 0xFFFFFFFF

d返回59197955

我可以做些什么来返回与python中的javascript相同的值?

javascript python bitwise-operators bit-shift
1个回答
0
投票

>>>是非符号扩展的,这是您可以在Python中通过将负数转换为带有您使用的位数的正数来获得的效果。因此,对于JavaScript,32位整数和无符号结果,只需在其前而不是后进行屏蔽:

a = -506298134
d = 6
d = (a & 0xFFFFFFFF) >> d
# d == 59197955

0
投票

让按位运算符了解更多参观https://www.geeksforgeeks.org/bitwise-operators-in-c-cpp/,这是一个好地方。

So >>在python中不影响符号,表示它不进行符号扩展,当您使用的位数从负数变为正数时,这会影响数字。在javascript中,请访问https://www.w3schools.com/js/js_bitwise.asp,即32位整数和无符号结果,用简单的词表示即可。

进一步如本答案所述-[What is JavaScript's highest integer value that a number can go to without losing precision?,在javascript中,按位运算符和shift运算符对32位整数进行操作,第二个示例溢出了32位容量,而在python中,对整数没有限制,因此您得到实际值。

© www.soinside.com 2019 - 2024. All rights reserved.