首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >补足中的2的幂和

补足中的2的幂和
EN

Stack Overflow用户
提问于 2016-02-03 21:27:16
回答 1查看 207关注 0票数 1

每个人都听说过这个比尔·高斯珀的笑话

任何给定的编程语言都与机器无关的神话很容易通过计算2的幂之和而爆炸。

  • 如果结果循环为周期=1与符号+,您是在一个符号大小机器上。
  • 如果结果循环为句点=1 at -1,则在一台双补机器上。
  • 如果结果循环的句点> 1,包括开头,那么您是在一个ones补码机器上。
  • 如果结果循环的句点> 1 (不包括开头),那么您的机器就不是二进制的--模式应该告诉您基。
  • 如果内存不足,则使用字符串或Bignum系统。
  • 如果说算术溢出是一个致命的错误,那么一些具有只读思维的法西斯猪正试图加强机器的独立性。但是捕获溢出的能力取决于机器。

通过这个策略,考虑宇宙,或者更准确地说,代数:

设X=二次方之和= ...111111

现在把X加到自己身上;

X+X= ...111110

因此,2X =X-1所以X= -1

因此,代数是在一台机器(宇宙)上运行的,它是两个互补的。

我想我理解其他的部分,但我坚持在一个的补充部分。我将考虑一个3位加一个符号位的简单示例。

大型体系结构和非二进制体系结构的行为是明确的。

如果结果循环为句点=1和符号+,则在符号震级机器上。

当2的幂溢出到符号位时,它变成负零,所以添加它不会改变任何情况。下一次迭代,它完全退出,我们一次又一次地添加正零,停留在MAXINT

示例:

代码语言:javascript
复制
 ______________________________
|  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,则在二补机器上。

当两个幂溢出到符号位时,它会产生最低的可表示整数。加到

示例:

代码语言:javascript
复制
 ______________________________
|  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-补体机器上。

我真搞不懂。我想它应该去:

代码语言:javascript
复制
 ______________________________
|  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位最终会掉下来),但是它们是如何计算的呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-04 06:16:33

产生这些“二的力量”的实现也是机器依赖的。你以为是左班。对于最后两台机器,还有另一种不同的方法,即将当前的一台机器添加到自身中。

8+8 =1的补加(或相当于-7 + -7)

代码语言:javascript
复制
   1000
 + 1000
-------
 1 0000
      1
-------
   0001
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35188045

复制
相关文章

相似问题

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