Posts pythonTip 89 整数表示
Post
Cancel

pythonTip 89 整数表示

题目描述: 在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])
This post is licensed under CC BY 4.0 by the author.
Trending Tags
Contents

pythonTip 88 数字转换

pythonTip 90 放棋子

Trending Tags