【发布时间】:2011-10-14 18:36:20
【问题描述】:
我正在编写一个教程来教孩子(9 到 13 岁)编程。我从计算机本身开始,它们与计算机科学没有太大关系,它更多的是关于解决计算问题的过程。
有了这个起点,我正在引导他们理解机器可以帮助我们解决某些计算问题。人们擅长抽象思维和想象力,但计算机在遵循明确规定的程序方面非常出色。他们可以以惊人的速度一次又一次地做到这一点!
我的教程已经介绍了以二进制格式表示数字。但是你如何表示负数?在任何符号系统中都有很多方法可以做到这一点,但是为计算机选择的系统有一个非常具体的原因:减少添加有符号整数值所涉及的机器数量。我们不想仅仅为了处理负数而构建和构建单独的芯片,我们希望使用我们一直用于自然数运算的相同芯片!
如果有人在街上问你(这看起来完全不切实际)“计算机如何表示负数,为什么要这样表示?”
我的具体问题:
计算机如何表示负数?
为什么计算机用这种方式表示负数?
我猜这么多经验丰富的开发人员可能不得不考虑一下这个问题。有些人甚至无法想出答案。我不是想浮夸,这是根据实际经验,我问过专业开发人员这个问题,他们无法回答。他们面无表情。给他们 JBoss 和 JavaBeans,他们会让你充满信心。太搞笑了!我也很纠结这个问题,我每次都必须提醒自己答案,我需要一张纸或白板来制定解决方案。我希望引导学生更好地了解他们正在使用的机器。
【问题讨论】:
-
这里有一个很好的解释。 en.wikipedia.org/wiki/Two's_complement
-
另外,对于未来的 Google 员工,@Welbog smashed this question here。
标签: computer-science twos-complement