题目描述: 在IA32上无符号的整型变量在内存中是“倒”存储的,如一个整数: 305419896 换算成 16进制
是0x12345678, 在内存中从低地址到高地址的4个字节里的数据分别是 0x78 0x56 0x34 0x12 。
你的任务是对于每个输入n, 输出其在内存中从低地址到高地址的存储数据。 表示十六进制数用到
字母时,一律大写。如: 不能输出 0x1d,而要输出 0x1D。 每字节之间用空格分开。
如:n=0,则输出:0x00 0x00 0x00 0x00
1
n=5987456,则输出:0x80 0x5C 0x5B 0x00
示例: 输入: n = 0 输出: 0x00 0x00 0x00 0x00
分析:
这是一个模拟题。 我们要明白,无符号数里面的 负数 和 正数 还是有点点区别的。
python 的 hex
得到 十六进制,不足8位是不会补足到8位的。
所以我们首先要对负数和正数进行一个判断,然后补足到8位。最后进行一个转换。
代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if n < 0:
hex_n = hex(0x100000000 + n)
else:
hex_n = hex(n)
len_hex_n = len(hex_n)
# 补充到 8位
ans = "0" * (8-len_hex_n+2) + hex_n[-(len_hex_n-2):]
# 按照题目要求,全部转化位大写
ans = ans.upper()
res = ""
for i in range(4):
pos = (3-i) * 2
res = res + ("0x" + ans[pos:pos+2] + " ")
print(res[:19])