"""补充练习:将 -127 到 127 的整数编码为 8 位原码、反码和补码。 输入一个整数。补充覆盖考试大纲中的数据编码内容。 学习说明: - 8 位编码中最高位作为符号位;本练习范围排除了 -128,避免补码范围与原码范围不同的问题。 - 非负数的三种表示相同,直接使用数值即可。 - 负数原码:最高位置 1,其余位保存绝对值。 - 负数反码:对绝对值按位取反,并用 & 0xFF 限制为 8 位。 - 负数补码:相当于 256 加上负数;& 0xFF 取出最低 8 位。 - format(value, "08b") 把数字显示成至少 8 位的二进制字符串。 """ number = int(input()) if not -127 <= number <= 127: raise ValueError("本练习范围为 -127 到 127") if number >= 0: # 正数的符号位为 0,三种编码相同。 sign_magnitude = number ones_complement = number twos_complement = number else: # 负数的三种编码按不同规则生成。 magnitude = -number sign_magnitude = (1 << 7) | magnitude ones_complement = (~magnitude) & 0xFF twos_complement = (-magnitude) & 0xFF print("sign-magnitude:", format(sign_magnitude, "08b")) print("ones-complement:", format(ones_complement, "08b")) print("twos-complement:", format(twos_complement, "08b"))