Мне интересно, есть ли способ сделать расширение знака дополнения до двух, как в C / C ++ в 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