小数的二进制补码

Posted

技术标签:

【中文标题】小数的二进制补码【英文标题】:Two's Complement of fractional numbers 【发布时间】:2022-01-17 20:28:30 【问题描述】:

我已经在网上搜索了几个星期来寻找这个问题的解决方案,但没有任何成功。

我的大学教授告诉我,要将带有小数部分的二进制数转换为二进制补码中的负数,我们必须这样做:

1) 将基数从 10 转换为基数 2 (+4.25) = (0100.0100)

2)我们现在唯一需要在二进制补码中转换的部分是点之前的部分。

0100 -> 1011 -> 1011 + 1 -> 1100

所以对他来说,二进制补码中的 -4.25 是 (1100.0100),小数部分没有任何转换。

对我来说,这个解决方案是错误的,因为如果我们尝试将这两个数字相加,我们会得到

0100.0100 + 1100.0100 = 0000.1000

那是 0.5 而不是 0

【问题讨论】:

我不明白你教授的意思。也许他在某种程度上指的是 -4.25 意味着 -(4 + 1/4) 而不是 -4 + 1/4。 [我在某些代码中犯过一次这个错误。]但仍然如此。 . . . 【参考方案1】:

对于一个分数,您的操作与普通整数完全相同,这意味着将所有位和 +1 反转为您的表示的最低有效位: 4.25 = 0100.0100 -4.25 = 1011.1100 也想不出你教授的意思。

【讨论】:

以上是关于小数的二进制补码的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 405. 数字转换为十六进制数(补码的问题) / 166. 分数到小数(模拟长除法) / 482. 密钥格式化

汇编语言第一节课:数制转换,真值和补码

计算机数据表示

Java学习--反码 原码 补码简析

补码加减法

408计算机组成原理—原码反码补码移码