binary - 负定点数表示

标签 binary bit-shift twos-complement negative-number fixed-point

我正在编写一个通用例程,用于在十进制和二进制表示之间转换定点数。

对于正数,处理很简单,但是当事情变成负数时,我发现了不同的来源。 Someone表示有一个位用于保存符号,而 others假设整个数字应该用 2 的补码表示为伪整数,即使它是负数。

请告诉我哪个来源是正确的,或者有符号定点数的标准表示形式吗?

另外,如果2的补码表示是正确的,那么如何用零整数部分表示负数。例如-0.125

最佳答案

定点数只是位值已更改的二进制值。为位分配位值是一项任意的人类事件,我们可以用任何有意义的方式来完成它。通常我们讨论的是二进制整数,因此可以方便地将位值 2^0 = 1 分配给 LSB,将 2^1=2 分配给 LSB 左侧的位,依此类推。对于 N 位整数,MSB 的位值变为 2^(N-1)。如果我们想要一个二进制补码表示,我们将 MSB 的位值更改为 -2^(N-1),并且所有其他位位值保持不变。

对于定点值,如果我们想让F位代表数字的小数部分,那么LSB的位值就变成2^(0-F) 对于无符号数,MSB 的位值变为 2^(N-1-F),对于有符号数,MSB 的位值变为 -2^(N-1-F)。

那么,我们如何用补码定点值表示 -0.125?这等于 0.875 - 1,因此我们可以使用一种表示形式,其中 MSB 的位值为 -1,所有其他位的值加起来为 0.875。如果您选择一个 具有 3 个小数位的 4 位定点数,您会说 二进制 1111 等于十进制 -0.125。将各个位的位值相加,得到 (-1) + 0.5 + 0.25 + 0.125 = -0.125。我个人喜欢将二进制数写为1.111,以记下哪些位是分数,哪些位是整数。

我们使用这种方法的原因是普通的整数算术运算符仍然有效。

关于binary - 负定点数表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60942450/

相关文章:

java - Java 十进制转二进制作业

c# - PowerShell Types.ps1xml 导入模块时找不到类型

java - 混合字符串中的字符(更改二进制结果的顺序)

c - 为什么将整数左移 24 位会产生错误的结果?

computer-science - 为什么是Two的补码?

python - 需要计算校验和方面的帮助

c - 读取二进制文件到-32767到32767的整数范围

gcc - shrl 与 sarl .. x86 汇编 gnu

c - 我一直在尝试编写一个程序将十进制转换为二进制,我不知道我的代码有什么问题?我正在使用代码块

python - Python中的二进制补码