每个人都听说过这个比尔·高斯珀的笑话
任何给定的编程语言都与机器无关的神话很容易通过计算2的幂之和而爆炸。
通过这个策略,考虑宇宙,或者更准确地说,代数:
设X=二次方之和= ...111111
现在把X加到自己身上;
X+X= ...111110
因此,2X =X-1所以X= -1
因此,代数是在一台机器(宇宙)上运行的,它是两个互补的。
我想我理解其他的部分,但我坚持在一个的补充部分。我将考虑一个3位加一个符号位的简单示例。
大型体系结构和非二进制体系结构的行为是明确的。
如果结果循环为句点=1和符号+,则在符号震级机器上。
当2的幂溢出到符号位时,它变成负零,所以添加它不会改变任何情况。下一次迭代,它完全退出,我们一次又一次地添加正零,停留在MAXINT。
示例:
______________________________
| Power of 2 || Accumulator |
| | ||Decimal|| | ||Decimal|
|0|001|| +1 ||0|001|| +1 |
|0|010|| +2 ||0|011|| +3 |
|0|100|| +4 ||0|111|| +7 |
|1|000|| -0 ||0|111|| +7 |
|0|000|| +0 ||0|111|| +7 |
|0|000|| +0 ||0|111|| +7 |
...这确实是一个周期1的循环,并且是一个正值。
如果结果循环为句点=1at -1,则在二补机器上。
当两个幂溢出到符号位时,它会产生最低的可表示整数。加到
示例:
______________________________
| Power of 2 || Accumulator |
| | ||Decimal|| | ||Decimal|
|0|001|| +1 ||0|001|| +1 |
|0|010|| +2 ||0|011|| +3 |
|0|100|| +4 ||0|111|| +7 |
|1|000|| -8 ||1|111|| -1 |
|0|000|| +0 ||1|111|| -1 |
|0|000|| +0 ||1|111|| -1 |
...当然,它会在-1处循环。
如果结果循环的句点> 1,包括开头,则在1-补体机器上。
我真搞不懂。我想它应该去:
______________________________
| Power of 2 || Accumulator |
| | ||Decimal|| | ||Decimal|
|0|001|| +1 ||0|001|| +1 |
|0|010|| +2 ||0|011|| +3 |
|0|100|| +4 ||0|111|| +7 |
|1|000|| -7 ||1|111|| -0 |
|0|000|| +0 ||1|111|| -0 |
|0|000|| +0 ||1|111|| -0 |
...我特别不明白它怎么能在周期大于1的情况下循环,这意味着2的幂不是简单地由左移产生的(否则1位最终会掉下来),但是它们是如何计算的呢?
发布于 2016-02-04 06:16:33
产生这些“二的力量”的实现也是机器依赖的。你以为是左班。对于最后两台机器,还有另一种不同的方法,即将当前的一台机器添加到自身中。
8+8 =1的补加(或相当于-7 + -7)
1000
+ 1000
-------
1 0000
1
-------
0001https://stackoverflow.com/questions/35188045
复制相似问题