二进制补码扩展python?
Two's complement sign extension python?
我想知道是否有一种方法可以像在 Python 中的 C/C++ 中那样使用标准库(最好在位数组上)进行二进制补码扩展。
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
以下代码提供与您的函数相同的结果,但更短一些。另外,显然,如果您要将其应用于大量数据,则可以预先计算两个掩码。
def sign_extend(value, bits):
sign_bit = 1 << (bits - 1)
return (value & (sign_bit - 1)) - (value & sign_bit)
我想知道是否有一种方法可以像在 Python 中的 C/C++ 中那样使用标准库(最好在位数组上)进行二进制补码扩展。
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
以下代码提供与您的函数相同的结果,但更短一些。另外,显然,如果您要将其应用于大量数据,则可以预先计算两个掩码。
def sign_extend(value, bits):
sign_bit = 1 << (bits - 1)
return (value & (sign_bit - 1)) - (value & sign_bit)