为什么“减号、空格、减号”会被解释为“加号”运算符?

3
node -e 'console.log(- -1)' // prints 1 which makes sense

然而:
node -e 'console.log(1 - - 1)' // prints 2 which does not make sense to me

整数 - - 整数 神奇地将“减号、空格、减号”转换为“加号”运算符。为什么?

更新:看起来我没有表达清楚。问题不是为什么在数学中双重否定总会计算为正数,而是它如何神奇地计算出+运算符;这是两种不同的情况——使一个负数变成正数是一回事,隐式调用+是另一回事。


2
http://www.mathsisfun.com/positive-negative-integers.html - Thom-x
3
好的,你正在进行减去一个负数的操作。 - John Weisz
5个回答

10

非常有道理,数学中的双重否定总是会被化简为肯定的结果。


1--1是什么情况(注意运算符之间缺少空格)?它没有被实现,会抛出一个错误。 - Vidul
1
@CPH4 扫描器不是那样工作的...它逐个解析令牌,并根据堆栈中的先前令牌期望下一个令牌类型。 - vinayakj
1
@CPH4,请在此处查看实现 http://www.ecma-international.org/ecma-262/5.1/#sec-11.3 - vinayakj

4

你的-字符之一是一元减号或负号。这使得你的一个文字是“负一”。另一个是减法。

1 - - 1

与以下代码相同:

1 - (-1)

虽然

- - 1

等同于

0 - (-1)

1

它将1 - - 1解释为1 - -1,其结果为2。


0

如果你仔细想一下,"- -1" 等于 "+1",所以 "1 - - 1" 等于 "1 + 1",也就是等于二。


0
在数学中,-- = +。如果我计算 1 - (-1),我会得到 2。减去一个负数等同于加上这个数...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接