你好, 欢迎｡
现在我们已经讨论了所有主要的运算符, 基本的,
奇怪的, 我们必须讨论这个运算符优先级的小概念｡
所以这基本上在你如何计算这些运算符的顺序时就开始起作用了｡
因此, 运算符优先级决定了术语和表达式的分组,
并决定了如何计算表达式｡
如果你用括号,
你就不需要理解这些了, 我们马上会讲到, 但是你必须理解这个概念,
因为它是语言的一部分, 是理解语言的一部分｡
因此, 当两个运算符共享一个操作数时,
优先级将决定求值的顺序｡
这一点通过一个例子会变得很清楚｡
因此, 例如, 乘法运算符的优先级高于附加运算符｡
某些运算符将有不同的求值顺序｡ 所以如果你要做一个复合语句,
你要执行很多不同的计算, 比如, 7加3乘以2｡
这可能会有多个结果, 加法和乘法｡
你需要明白我是应该先做加法, 还是应该先做乘法, 因为根据你先做什么,
结果会发生变化｡
例如,
x等于7加3乘以2, 结果可能是13或20, 这取决于计算每个操作数的顺序｡
因此, 执行各种操作的顺序可能会产生巨大的差异｡
这就是为什么你需要了解优先权｡
C语言提供了选择先做什么的特定规则｡
在这种情况下, 做我做的乘法加｡ c会告诉你接下来会发生什么｡
理想情况下, 如果你把它们放在括号里, 你就可以告诉它该怎么做,
你就可以做出决定｡
但是如果你不把它放在括号里, 编程语言会为你做决定｡
所以在c中, 乘法运算符的优先级要高于加法运算符｡
所以结果是13.
现在你可以说7加3, 也就是10, 然后乘以2,
结果就是20｡
或者你可以做7加3乘2, 等于7加6等于13｡
这就是为什么你可以有不同的价值观｡
这是模棱两可的｡ 你先做加法还是先做乘法｡
幸运的是, 这又是由语言决定的｡ 但你可以看到有两个不同的结果｡
7加3乘2或7加3乘2｡
你看到这里的停顿了｡
现在c要做的是后者｡ 它会先执行乘法运算, 因为它的优先级更高.
它是3乘以2, 等于6, 然后加到7｡
所以结果x会是13, 因为星星的优先级比加法高｡
所以每一个运算符都有规则, 哪个运算符优先于另一个｡
有一个优先级｡
而乘法和除法的优先级高于加法和减法｡
比如说, 它们是先被执行的.
您可以避免所有这些优先级, 并让语言为您决定是否提供括号｡
括号将始终以最高优先级对表达式进行分组｡
所以如果我说7加3, 然后用括号括起来, 它总是先做加法｡
如果我说3乘以2,
然后用括号括起来, 它总是会做乘法, 然后加上括号外的任何东西｡
所以你真的应该用括号｡ 请始终使用括号｡
否则, 语言就要替你作主了｡ 你必须记住所有的优先级,
这是很难做到的, 我会在下一个表格中告诉你｡
有很多不同的运算符, 你必须知道所有这些不同运算符的优先级｡
所以它会变得非常非常令人困惑｡
这类似于你让语言为你做一个隐式转换或者你用一个转换运算符做一个显式转换,
这里的想法是一样的, 只是用括号｡
如果我们看一下这张表, 我想我们会再看一下, 因为我首先要讲的是结合性｡
关联性与优先级有关, 因为如果两个运算符具有相同的优先级,
会发生什么情况｡ 那你怎么弄清楚顺序的｡
然后应用关联性｡
因此, 只要运算符具有相同的优先级, 就可以应用附加规则｡
所以关联性基本上就是你是从左边开始向右还是从右到左｡
所以如果你共享一个操作数, 并且它们的执行顺序相同, 你将根据关联性规则,
按照语句的顺序执行它们.
因此, 对于大多数运算符, 顺序是从左到右｡ 让我给你们看一个例子｡
如果您说1等于等于2不等于3, 则等于等于和不等于运算符感叹号等于具有相同的优先级｡
所以在这个例子中我们有一个模糊性｡ 我们有麻烦了｡
我们不知道先评估什么｡ 我们不知道是需要1等于2,
还是2不等于3, 这很重要, 因为我们在做布尔表达式.
这是一个布尔表达式, 所以它的值是真还是假.
所以你要做的就是应用关联性｡
等于等于和不等于的关联性都是从左到右｡
你首先要做1等于2, 这是假的｡
然后你会说false, 它不等于3, 它不是｡
所以1等于2, 然后不等于3.
所以结果会是假的｡ 因此, 左边的表达式首先执行,
然后向右移动｡
你可以这样想, 它基本上等于这些括号｡
首先, 你要计算1等于2｡
如果它的值是真还是假, 你会说它等于3吗｡
这是令人困惑的, 因为它没有真或假的值｡
但是1等于, 记住这是比较运算符, 不是赋值运算符｡
我们这里没有使用变量, 所以更令人困惑｡
但是如果你把这些数字放在变量中,
你就可以说, 如果x等于y, 那么如果x是1,
y是2, 那就会得出2为假｡
因为他们不平等｡
如果3是另一个变量z, 等于3,
你会说x等于y是假的, z等于3｡
所以假不等于3｡ 所以它会是假的｡
所以1等于等于2先执行, 结果再为0假｡
则0不等于3, 执行结果为1 true｡
所以我一开始说false, 但很明显0不等于3,
这整个过程的结果都是false｡
整件事的结果都是真的, 很抱歉, 因为0不等于3｡
所以0不等于3我说它是假的是因为它们不相等, 但这意味着它实际上是真的｡
真漂亮｡ 这是我们的表,
上面写着所有的优先级和结合性规则, 要记住这些规则非常困难｡
再一次, 你怎么做, 用括号｡
但这是桌子｡
最高优先级级别位于顶部, 因此后缀运算符具有最高的首选级别｡
如果你在同一个表达式中使用了其中的任何一个, 那么你从左到右读｡
所以后缀运算符, 比如括号,
是最高优先级的｡
所以每次你在括号里加上一个东西, 它就会生效｡
但是你有方括号, 然后你有后缀运算符｡
我们还没有讨论过一些指针的东西, 也就是这个破折号大于,
但是我们现在知道了加号, 加号和减号, 减号, 它们是具有最高优先级的后缀｡
一元运算符, 比如加号, 减号, 感叹号,
代字号, 加号, 减号, 减号, 然后是转换运算符, 因为它只有一个操作数.
然后星号运算符是指针运算符｡ “与”号是按位的, 大小为｡
这些具有下一个最高优先级｡
但是在这里你实际上是从右到左读来求值如果你在同一行有两个状态语句｡
然后我们再一次按顺序走｡ 你必须知道这个顺序并记住它｡
很坚韧做到, 但我确实想给你们看一下,
只是想用一个小插图来展示一些表格｡ 有很多接线员｡
所以有很多的预存层次, 而且大部分的关联性就像我们之前说的, 是从左到右的｡
对于一元运算符, 您只有right left地结合性;
因此, 按位运算符从左到右一直向下｡
从右到左的条件三元运算符｡
赋值运算符始终位于底部｡ 总是最后评估的｡
如果它们相等, 你就从右到左计算其他的.
逗号也被称为运算符｡ 从左到右｡
另一个概念,
优先级和结合性, 我们不会在其他例子中讨论｡
我们会一直使用括号, 这就是你想要做的｡
但是, 如果你想完全理解这门语言, 你想理解这些概念, 这就是为什么我告诉你｡
没有人能真正声称他们知道语言如果他们不知道一些细节像这样｡
但是要尽可能多地使用括号｡ -谢谢—谢谢