如何在python中获得逻辑上正确的二进制移位

dem*_*ock 28 python bitwise-operators

正如标题所揭示的那样.在JavaScript中有一个特定的运算符'>>>'.例如,在JavaScript中,我们将得到以下结果:

(-1000)>>> 3 = 536870787

(-1000)>> 3 = -125

1000 >>> 3 = 125

1000 >> 3 = 125

那么有某种方法或运算符代表这个'>>>'吗?

NPE*_*NPE 40

没有内置的操作符,但您可以轻松地模拟>>>自己:

>>> def rshift(val, n): return val>>n if val >= 0 else (val+0x100000000)>>n
... 
>>> rshift(-1000, 3)
536870787
>>> rshift(1000, 3)
125
Run Code Online (Sandbox Code Playgroud)

以下替代实现消除了对以下内容的需要if:

>>> def rshift(val, n): return (val % 0x100000000) >> n
Run Code Online (Sandbox Code Playgroud)

  • 0x100000000是"1 << 32",32是用于表示整数的位数(重要但未在任何地方说明).如果你有64位整数,那么你必须使用`1 << 64`代替. (5认同)
  • `(val + 0x100000000)%0x100000000)`是'val%0x100000000`. (4认同)
  • 例?注意Python中的`-1%3 == 2`.["模运算符总是产生与第二个操作数相同符号的结果(或零)"(http://docs.python.org/reference/expressions.html#binary-arithmetic-operations) (3认同)

Fem*_*ref 7

不,没有.python的正确转变是算术的.

  • @Mark Ransom:错了,您可能需要计算用另一种语言定义的表达式(就像我现在所做的那样)。但我同意,由于无符号数的不存在,无符号移位的需要相当有限。 (3认同)