如何表示整数,例如,两个字节中的 23647,其中一个字节包含最后两位数字 (47(,另一个字节包含其余数字 (236(?
有几种方法可以做到这一点。
一种方法是尝试使用二进制编码十进制 (BCD(。这会将十进制数字而不是整个数字编码为二进制。打包形式将两个十进制数字放入一个字节中。但是,您的示例值23647
有五个十进制数字,在 BCD 中不适合两个字节。此方法最多适合9999
的值。
另一种方法是将两个部分中的每个部分放入二进制中,并将每个部分放入一个字节中。你可以用100
进行整数除法来得到上半部分,所以在 Python 中你可以使用
upperbyte = 23647 // 100
然后下部可以通过模运算得到:
lowerbyte = 23647 % 100
Python将直接将结果转换为二进制并以这种方式存储它们。您可以在Python和许多其他语言中一步完成所有这些操作:
upperbyte, lowerbyte = divmod(23647, 100)
您可以保证下字节值适合,但如果给定的值太大,则许多上字节值实际上不适合一个字节。所有这些都假设该值为正数,因为负值会使事情复杂化。
(以下答案是针对该问题的先前版本,即将像36.47
这样的浮点数放入两个字节中,一个字节用于整数部分,另一个字节用于小数部分。
一种方法是"移动"数字,以便将这两个字节视为单个整数。
取你的值(36.47(,乘以256(适合一个字节的值的数量(,将其四舍五入到最接近的整数,将其转换为二进制。该值的底部 8 位是"十进制数",接下来的 8 位是"整数值"。如果还有任何其他位剩余,则您的数字太大,并且存在溢出情况。
这假定您只想处理非负值。处理负面因素使事情变得有些复杂。最终结果只是您的起始值的近似值,但这是您能做的最好的事情。
在 36.47 上进行这些计算会得到二进制整数
10010001111000
因此,"十进制字节"是01111000
的,"整数字节"在填充到8位时是100100
或00100100
的。这表示36.46875
精确浮点数,并且所需的值36.47
近似值。