用二进制表示十进制数

时间:2018-10-16 09:29:00

标签: math logic byte logical-operators

如何用两个字节表示整数,例如23647,其中一个字节包含最后两个数字(47),另一个字节包含其余的数字(236)?

1 个答案:

答案 0 :(得分:2)

有几种方法可以做到这一点。

一种方法是尝试使用Binary Coded Decimal (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

因此,当填充为8位时,“十进制字节”为01111000,而“整数字节”为10010000100100。这完全代表浮点数36.46875,大约代表您的期望值36.47