你能解释一下以下问题的解决办法吗?我不明白我们是如何得出这个结论的:−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。这提供了一个唯一的零表示形式。此外,所有的数字计算都是根据二的幂,不像一个人对负数的表示。
发布于 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的二进制表示形式中的所有位,这正是一个人的恭维。海事组织,这个解释完全违反直觉,上面的解释(或维基百科)要好得多.
发布于 2014-10-30 19:56:58
我不确定我完全理解你的问题。2的补码是用来使某些事情变得更简单的格式,只有当你的值在某种程度上受到限制(一个固定的位数)时,它才能起作用。对于4位单词,1的零的补数是1111,要得到2的补,你要加一个1,它会将所有的比特翻转到0000,这很方便。0001的补码是1110,加上一个,得到1111,当它被解释为一个有符号的值时是-1。
1's 2's
2 1101 1110
3 1100 1101
4 1011 1100第一个(MSB)位总是指示值是正还是负。其他值“计数”(1,2,3,4.)对于正数和“倒计时”(-1,-2,-3.)负值。
很难用非离散的代数术语来表达这一点,因为我们通常认为“数字”是无限的。
https://stackoverflow.com/questions/26661304
复制相似问题