Существует ли созданный в функции в Python, который преобразует двоичную строку, например, '111111111111', к дополнительному целому числу two-1?
Можно использовать bit_length () функция для преобразования чисел в дополнение их two:
def twos_complement(j):
return j-(1<<(j.bit_length()))
In [1]: twos_complement(0b111111111111)
Out[1]: -1
Вот версия для преобразования каждого значения в шестнадцатеричной строке к, он - дополнительная версия two.
In [5159]: twoscomplement('f0079debdd9abe0fdb8adca9dbc89a807b707f')
Out[5159]: '10097325337652013586346735487680959091'
def twoscomplement(hm):
twoscomplement=''
for x in range(0,len(hm)):
value = int(hm[x],16)
if value % 2 == 1:
twoscomplement+=hex(value ^ 14)[2:]
else:
twoscomplement+=hex(((value-1)^15)&0xf)[2:]
return twoscomplement