TSL语言基础 > TSL语言基础 > 基础知识 > 运算符

算符优先级    

  •   什么是优先级呢?
      例如1+2*3,是先计算2*3,再计算1+,这就表示*的优先级高于+,1+2*3等同于1+(2*3)。
    2>2+1,是先计算2+1,再计算2>,结果2>3为假,表示+的运算优先级高于>,2>2+1等同于2>(2+1)。
      当优先级一样的时候则从左至右计算。
      以下会出现一些在上边未使用的算符,这些算符将会在矩阵计算等章节中详细解释。运算符的优先级有两个特例,就是+-号的优先级分为两种,一个是一元运算符的正负号的优先级,一个是做加减法计算的优先级。
    运算符 优先级
    (),[],. 0(最高)
    &,Not,++,--,`,!,.!,.!! 1
    $ 2
    ^,~,:^ 3
    *,/,\,%,Mod,Div, :*,:/,:\,SHL,SHR,ROL,ROR 4
    +,-,|,:|,union,union2,Intersect,Outersect,Minus,.|,.||,.&,.&&, ->,.^,正号+,负号- 5
    IS,IN,Like,=,<,>,>=,<=,<>,.=,.<>,.>=,.<=,.<,.> 6
    And,Or 7
    : 8
    :=,+=,-=,*=,/=,\=,^=,~=,%=,div=,|=,:|=,union2=,Intersect=,Outersect=, Minus=,&=,:*=,:/=,:\=,:^=,::=,::,.|=,.&=,.||=,.&&=,.^= 9
    @ 10(最低)
      值得注意的是,虽然TSL语言的算符和Pascal语言在很多方面相似,但是算符的优先级却不尽相同,有一个很典型的例子:
      在Pascal语法中,A>1 and B<2这样的表达式是不成立的,这是因为在Pascal中And可作为位与算符,而且优先级比>要高,那么A>1 and B<2等同于A>(1 and B)<2,这样的表达式显然是不对的。
      而在TSL语法中,And为逻辑运算符,而且优先级低于>和<,这样A>1 and B<2就等同于(A>1) and (B<2)。在C或者类C语言中,由于逻辑运算符与位运算符是独立的,所以与TSL类似,在C语言中A>1 && B<2也是成立的。
      正是由于运算的优先级存在很多的语言差异,而且算符优先级即使对于一个有着丰富经验的程序员而言,也是经常容易混淆的。正因为如此,笔者建议读者在不确认甚至于无论是否确认,也是用圆括弧来把优先级标出来。例如A>1 and B<2我们就应该写成(A>1) and (B<2),这样不仅仅阅读起来一目了然,形成这个良好的习惯对于转换于多种计算机语言开发的人也可以起到很大的帮助。