"""练习 18:输出字符的 ASCII 码,并进行整数与格雷码的相互转换。 输入:第一行一个 ASCII 字符,第二行一个非负整数。 学习说明: - ord(character) 返回字符的编码数值;ASCII 字符只占用 ASCII 字符集范围。 - 格雷码的转换公式是 n ^ (n >> 1),^ 表示按位异或,>> 表示向右移位。 - 解码时,binary_value 保存当前还原结果;把格雷码不断右移,并与结果异或。 - 最终的 binary_value 应与输入整数相同,可用来检查转换过程。 """ character = input() number = int(input()) if len(character) != 1 or not character.isascii(): raise ValueError("第一行必须输入一个 ASCII 字符") if number < 0: raise ValueError("第二行必须输入非负整数") ascii_code = ord(character) gray_code = number ^ (number >> 1) # 格雷码解码:格雷码与它逐次右移后的值进行异或,得到原二进制数。 binary_value = gray_code shifted = gray_code >> 1 while shifted: binary_value ^= shifted shifted >>= 1 print("ASCII:", ascii_code) print("gray:", gray_code) print("decoded:", binary_value)