2015-08-15 71 views
1

我想知道是否有一种方法可以像使用Python中的C/C++一样使用标准库(最好是在一个bitarray上)进行二进制补码的扩展。两个补码符号扩展python?

C/C++:

// Example program 
#include <iostream> 
#include <string> 

int main() 
{ 
    int x = 0xFF; 
    x <<= (32 - 8); 
    x >>= (32 - 8); 
    std::cout << x; 
    return 0; 
} 

下面是一个Python函数我写这(在我的测试)完成同样的事情。我只是想知道是否有一个内置的(或只是更快)做它的方式:

def sign_extend(value, bits): 
    highest_bit_mask = 1 << (bits - 1) 
    remainder = 0 
    for i in xrange(bits - 1): 
     remainder = (remainder << 1) + 1 

    if value & highest_bit_mask == highest_bit_mask: 
     value = (value & remainder) - highest_bit_mask 
    else: 
     value = value & remainder 
    return value 
+0

http://stackoverflow.com/q/1604464/2823755 – wwii

+0

啊,没有看到,因为某些原因。感谢您指出了这一点。 – Vasu

+0

虽然是为了字符串转换。 – wwii

回答

7

下面的代码提供了相同的结果作为你的功能,但它是一个有点短。另外,显然,如果您要将这个应用于大量数据,您可以预先计算两个掩码。

def sign_extend(value, bits): 
    sign_bit = 1 << (bits - 1) 
    return (value & (sign_bit - 1)) - (value & sign_bit)