0

目前正在通过一流的CS:APP进行工作,因此在进行一些补码练习时出现了一个奇怪的问题。

GNU bc 1.06,默认设置 - 无标志:

-2 ^ 3
-8

... 但是之后 ...

-2 ^ 4
16

问题

为什么-2 ^ 4等于正16?我把它插入谷歌的计算器功能,我确实得到了-16。

我可能已经再次打开了我脑海中的镜头盖(关于小指和大脑),但任何关于这种行为的提示都是值得赞赏的。

谢谢

sc。

4

4 回答 4

4

因为 (-2)·(-2)·(-2)·(-2) = 16

于 2014-05-18T08:36:37.890 回答
4

您很可能在输入等式时犯了错误。我敢打赌,您的评估如下:

-(2 4 ) = -1 × 2 4 = -16

在求解具有负数的幂时,有一个简单而通用的规则:

  • 如果您的指数是奇数,您的结果将是负数
  • 如果您的指数是偶数,您的结果将是正数

这仅仅是因为将一个负数与另一个负数相乘会得到一个正数。

-1 × -1 = 1

-1 × 1 = -1

-2 1 = (-2)

-2 2 = (-2) × (-2)

-2 3 = (-2) × (-2) × (-2)

-2 4 = (-2) × (-2) × (-2) × (-2)

让我们从其中一个乘法开始:

(-2) × (-2) = 4

所以:

(-2) × (-2) × (-2) × (-2) = 4 × 4 = 16

编辑:

出于兴趣,我尝试将其放入出色的 Wolfram Alpha 中,但它以类似的方式感到困惑:

  • (-2)^x(解释为(-2) x

    (-2)^x

  • -2^x(解释为-(2 x )

    -2^x

于 2014-05-18T08:41:08.657 回答
2

谷歌说它是-16,因为它将问题解释为 -(2^4) 即 -(16)

于 2014-05-18T08:39:53.113 回答
1

显然, bc 给出了否定优先于乘法运算的减号,也就是说,它将这个减号视为数字的一部分。我相信相反的约定更为普遍,即将否定视为从零减去,因此求幂优先于否定。

实际上,在 bc 中0-2^4按预期返回 -16,而0+-2^4is 不是语法错误并再次给出 16 作为结果。

所以 -2^4 的两个读数在相应的约定中都是正确的,选择哪一个是一个品味问题,唯一重要的是要保持一致,如果使用 bc 变体,则正确宣布它。

于 2014-05-18T20:11:42.450 回答