首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于两个补语的概念需要解释

关于两个补语的概念需要解释
EN

Stack Overflow用户
提问于 2014-10-30 19:04:51
回答 2查看 351关注 0票数 0

你能解释一下以下问题的解决办法吗?我不明白我们是如何得出这个结论的:−2^(n−1 ) + 2^(n−1)−1−x,尤其是为什么我们需要减去x

通过取一个数字的补数,然后再加上一个补数,就可以得到一个负数的表示。为什么会起作用?二补表示背后的关键思想是什么?回答:关键的想法是把符号位当作一个带负号的值。在n位表示中,符号位的值为-2^n1 .当你有一个正数x。通过取2的补数,你想得到−x。在一个正数x中,符号位是0。当你取一个数字的补充数,你会得到:

−2^(n−1 ) + 2^(n−1)−1−x

简化后得到−x−1,当你把+1加到这个数字中时(就像两个补语:取一个补和一个),你就得到了−x。这提供了一个唯一的零表示形式。此外,所有的数字计算都是根据二的幂,不像一个人对负数的表示。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-30 19:49:44

你所提供的解决方案似乎使你对一两句恭维的解释变得不必要的复杂。简而言之,一个人的恭维是通过翻转这个数字的二进制表示中的所有位来获得的。假设n= 8,x= 13,然后恭维一下

X= 00001101 (无符号值13)

-x = 11110010 (无符号值242 =255-13)

也就是说,-x表示为2^n-1-x。

两种恭维仅仅是一个人的恭维加上1:

-x = 11110011 (无符号值243 =255-13+ 1)

即-x表示为2^n -x

回到您提供的解决方案:

−2^(n−1) = 10000000

2^(n−1 )−1= 01111111

−2^(n−1 ) + 2^(n−1)−1= 11111111

(−2^(n−1) + 2^(n−1)−1) - x翻转x的二进制表示形式中的所有位,这正是一个人的恭维。海事组织,这个解释完全违反直觉,上面的解释(或维基百科)要好得多.

票数 1
EN

Stack Overflow用户

发布于 2014-10-30 19:56:58

我不确定我完全理解你的问题。2的补码是用来使某些事情变得更简单的格式,只有当你的值在某种程度上受到限制(一个固定的位数)时,它才能起作用。对于4位单词,1的零的补数是1111,要得到2的补,你要加一个1,它会将所有的比特翻转到0000,这很方便。0001的补码是1110,加上一个,得到1111,当它被解释为一个有符号的值时是-1。

代码语言:javascript
复制
     1's     2's
2   1101   1110
3   1100   1101
4   1011   1100

第一个(MSB)位总是指示值是正还是负。其他值“计数”(1,2,3,4.)对于正数和“倒计时”(-1,-2,-3.)负值。

很难用非离散的代数术语来表达这一点,因为我们通常认为“数字”是无限的。

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

https://stackoverflow.com/questions/26661304

复制
相关文章

相似问题

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