小数的二进制补码
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. 密钥格式化