如何相互转换二进制补码和符号与大小?

How to convert to and from two's complement and sign & magnitude?

如何将二进制补码表示形式的有符号整数转换为符号和大小表示形式,反之亦然python?

def twos_comp_to_sign_mag(twos_comp_int):
  # function definition here

def sign_mag_to_twos_comp(sign_mag_int):
  # function definition here

twos_comp_to_sign_mag(255) == 129
sign_mag_to_twos_comp(129) == 255
# Since:
# 255 in binary is 1111_1111 or -1 in two's complement notation
# 129 in binary is 1000_0001 or -1 in sign-magnitude notation

只能对位数固定的整数进行这种转换。我已将其作为函数的参数。

这两个操作是相辅相成的,可以用同一个函数来双向操作。您将符号位分开,然后补余数并将它们组合在一起。

def twos_comp_to_sign_mag(value, bits=8):
    sign_bit = 1 << (bits - 1)
    sign = value & sign_bit
    mask = sign_bit - 1
    if sign:
        value = -(value & mask)
    return (sign_bit & value) | (value & mask)

>>> twos_comp_to_sign_mag(255)
129
>>> twos_comp_to_sign_mag(129)
255