我从文件读取位。 第一个值是
bits = str(11101111010110011000000000000001)
这是一个带符号的32位整数的二进制表示形式,因此它已经是二进制补码和小尾数形式。 我认为我想要获得的价值是
-279347199
至少该网站将其转换为http://www.binaryconvert.com/result_signed_int.html?hexadecimal=EF598001
我发现解决此问题的所有内容都将这些位解释为无二进制补码和小端序的纯二进制
答案 0 :(得分:0)
从二进制补码转换的巧妙技巧是从末尾找到1,然后用补码替换其余的位。
def convert_from_twosc(bits):
bits = bits[::-1]
for bit in bits:
if bit == '1':
for new_bit in range(bits.index(bit) + 1, len(bits)):
if bits[new_bit] == '0':
bits[new_bit] = '1'
else:
bits[new_bit] = '0'
break
return "".join(map(str, bits[::-1]))
bits = input()
number = int(convert_from_twosc(list(bits)) , 2) * -1
print(number)
输出:
11101111010110011000000000000001
-279347199
此函数始终假定输入,它是带符号的负数,因此请小心。