5位带符号的二进制到int

时间:2016-09-04 19:14:43

标签: python binary int signed

我的代码必须读取5位带符号的二进制值。我们先说它是11111,它是两个补码-1。但是int("0b11111", 2)会返回31

如何解析正确的值?

1 个答案:

答案 0 :(得分:1)

这是一个可能的解决方案,用于测试未来仿真器的所有5长度二进制数:

import itertools


def two_complement(value, length):
    if (value & (1 << (length - 1))) != 0:
        value = value - (1 << length)
    return value

opcodes_emulator = ["".join(seq) for seq in itertools.product("01", repeat=5)]

for my_string in opcodes_emulator:
    print my_string, two_complement(int(my_string, 2), len(my_string))