两个补码符号扩展python?

时间:2015-08-15 23:34:34

标签: python twos-complement

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

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

1 个答案:

答案 0 :(得分:8)

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

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