目前正在通过一流的CS:APP进行工作,因此在进行一些补码练习时出现了一个奇怪的问题。
GNU bc 1.06,默认设置 - 无标志:
-2 ^ 3
-8
... 但是之后 ...
-2 ^ 4
16
问题
为什么-2 ^ 4等于正16?我把它插入谷歌的计算器功能,我确实得到了-16。
我可能已经再次打开了我脑海中的镜头盖(关于小指和大脑),但任何关于这种行为的提示都是值得赞赏的。
谢谢
sc。
目前正在通过一流的CS:APP进行工作,因此在进行一些补码练习时出现了一个奇怪的问题。
GNU bc 1.06,默认设置 - 无标志:
-2 ^ 3
-8
... 但是之后 ...
-2 ^ 4
16
问题
为什么-2 ^ 4等于正16?我把它插入谷歌的计算器功能,我确实得到了-16。
我可能已经再次打开了我脑海中的镜头盖(关于小指和大脑),但任何关于这种行为的提示都是值得赞赏的。
谢谢
sc。
因为 (-2)·(-2)·(-2)·(-2) = 16
您很可能在输入等式时犯了错误。我敢打赌,您的评估如下:
-(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 中,但它以类似的方式感到困惑:
谷歌说它是-16,因为它将问题解释为 -(2^4) 即 -(16)
显然, bc 给出了否定优先于乘法运算的减号,也就是说,它将这个减号视为数字的一部分。我相信相反的约定更为普遍,即将否定视为从零减去,因此求幂优先于否定。
实际上,在 bc 中0-2^4
按预期返回 -16,而0+-2^4
is 不是语法错误并再次给出 16 作为结果。
所以 -2^4 的两个读数在相应的约定中都是正确的,选择哪一个是一个品味问题,唯一重要的是要保持一致,如果使用 bc 变体,则正确宣布它。