2016-08-10 16 views
2

具体来说,我想利用这个号码:获取在Python留下像Java一样换档

x = 1452610545672622396 

,并执行

x ^= (x << 21) // In Python I do x ^= (x << 21) & 0xffffffffffffffff 

我想:-6403331237455490756,这是我所得到的在Java中

而不是:12043412836254060860,这就是我在Python中得到的(这就是我不想要的

编辑:在Java中我做的:

long x = 1452610545672622396; 
x ^= (x << 21); 
+0

@sun轻摇谢谢,这是很多更清晰...... +1 – cogmission

+0

不客气。我刚刚格式化了代码,并且可以使它更清晰:) –

回答

3

您可以使用符号整型使用ctypes.c_longlong的java像64位,请参见下面的例子:

from ctypes import c_longlong as ll 

x = 1452610545672622396 

output = ll(x^(x<<21)) 

print output 
print output.__class__ 
+0

嗨,谢谢!什么是最好的方式来获取价值(不作为一个字符串),但作为一个长期,我可以合作? – cogmission

+1

@cogmission我已经编辑了我的答案,使其更清楚,你可以看到__class__的输出将是,这就是你想要使用的 – BPL

+0

对不起,我不是真的是一个Python程序员,所以我只使用了ll().value''',但我想知道是否有更好的方法? – cogmission

0

,可能会造成溢出。 Java long是64位长,而python没有大小限制。尝试使用Long的Long包装类。 Long对象也没有限制(技术上所有东西都有其限制......)。

+0

感谢您的回答。我想要做的是规范化Python,而不是Java - 所以实际上是“强制”Python中的溢出? – cogmission

相关问题