在csh中,为什么4-3+1等于0?

13
#!/bin/csh

@ cows = 4 - 3 + 1
echo $cows

这个简单的csh脚本运行时输出为“0”,但我希望它输出“2”。

~root: csh simple.1
0
我进行了大量的搜索,唯一能想到的是“ - ”被视为一元取反而不是减法,从而改变了运算符优先级,并最终得出了 4-4 而不是 2+1。这个推断正确吗?如果是,有什么原因吗?如果不是...请帮忙!

编辑:所以它们是右结合的!这些运算符在 C 中并不是右结合的,是吗?C-Shell 和 C 有这么大的区别吗?

4
这里有一个更好的问题... 为什么csh使用右结合解析树而不是左结合? - Joe Phillips
11
为什么使用csh?这是一个更好的问题。 - Rob Wells
我实际上并没有使用它。这是我在为朋友解答问题。以下是新的讨论链接:http://stackoverflow.com/questions/1010119/ - Instantsoup
只是为了增加一些娱乐性,在tcsh中(其中/bin/csh通常是一个符号链接),"4 - 3 + 1"的计算结果为"2"。 - Keith Thompson
3个回答

33

尽管您期望这些运算符是左结合的,但它们在csh中是右结合的,因此它被计算为4-(3+1)

   -
  / \
 /   \
4     +
     / \
    3   1

那不是一个解析树。它也不是一棵抽象语法树。再看一下巴克斯范式,看看两个操作数和运算符如何成为表达式节点的子节点。编译器必须额外做一些工作,将解析树转换为表达式树。 - Windows programmer

21

在csh中,加号和减号是从右往左结合的。这意味着'4 - 3 + 1'被计算为'4 - (3 + 1)'。


3

运算符分组。它将运算解读为4 - (3 + 1),而不是(4 - 3) + 1。


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