首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从其定义中求出两种形式的编码公式

如何从其定义中求出两种形式的编码公式
EN

Stack Overflow用户
提问于 2022-05-24 15:38:05
回答 1查看 42关注 0票数 0

我读过wiki文章和许多其他文章。wiki中的定义是:“对于2N来说,作为一个数字的一个补充的定义性质就是,这个数与原始产生的2N之和。”使用两位的完全表示计算原始值的公式是:“两个补数系统在二进制数表示中编码正数和负数。每一位的权重是2的幂,但最重要的位,其权重为2的对应幂的负数。”

例如,对于使用二进制数最多三位的数字p=-3,我们使用1000-011=101来计算两个补表示,这是p的两个补表示,-1x2^2+0x2^1+1x2^0=-3是p的原始值。我只是不知道为什么我们可以通过将公式应用到两种复杂表示上来得到原始值?是否有任何推理或证明过程?或者,它只是另一个定义和赋值规则,因此我们使用公式将每个原始值赋给相应的两个完全表示。

EN

回答 1

Stack Overflow用户

发布于 2022-05-24 20:37:37

两个补表示与标准基-2表示相同,除了高比特为负值外,它的正常值为负值。因此,例如,8位双补码的值为

代码语言:javascript
复制
-128 64 32 16 8 4 2 1

因此,给定10001001,其值为-128 +8+1= -117。

回答你后面的问题。“2‘s补语”有多个定义,它们都是等价的,所以我不太确定你认为哪一个是“正式的”补语。

为了简单起见,我将假设一台8位的计算机,所以数字很小。

请注意,计算机上的ADD指令并不真正执行添加操作。它执行一个加法,mod 256。如果你做了240 + 27,你会得到11,你一点也不会感到惊讶。那是电脑上的加法。

但是请注意,mod 256,240和-16是相同的数字。所以计算机不知道你是在添加240和27,还是-16和27,在这两种情况下,你得到的答案都是一样的,11。

在处理无符号数字时,您是在告诉计算机将8位处理为0到255之间的数字。在处理数字符号时,你(而不是计算机)处理大于128的数字,就好像它们比计算机小256。但电脑根本不在乎。

注意,与ADD完全相同的东西也适用于SUB和MUL。它不适用于组织。

我希望这能澄清事情的真相。没有魔法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72365717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档