运算符之优先级篇——C语言

运算符优先级

1.1 基本算数运算符

算数运算符:( +、- ) < ( *、/、% )

puzzle

	输出:111.1.111.1.201.1.311.1.4

在复杂的表达式里,使用括号有助于读者搞清楚操作符与操作数之间的关联关系。

1.2 赋值操作符

优先级:==(判等)  >  =(赋值)

puzzle

	输出:101.2.1401.2.211.2.311.2.4

1.3 逻辑操作符和增量操作符

优先级:逻辑( && > | | )

1-3

	输出:11.3.111.3.221.3.30					
		 31.3.40					
		 ?1.3.5

在这个程序里,“PRINT”宏有一个形式参数int。“PRINT(x)”是使用实际参数“x”进行的“PRINT”调用。在 扩展“PRINT”调用的时候,”C语言预处理器会先把宏定义里的所有 “int” 替换为 “x”再把宏调“PRINT(x)”替换为结果字符串“printf(“%d\n”,x)”。请注意,形式参数 int 并不是匹配单词 “printf” 里的 “int” 字符的。这是因为宏定义里的形式参数是标识符——具体到这个例子,形式参数int只对标识符 int 进行匹配和替换。

	etc:  	x+++++y 		//	解释为 x++ ++ + y	(表达式非法)

为避免产生二义性,如果一个字符串能够解释为多个操作符,C语言编译器将按照“构成操作符的字符个数越多越好”的原则来作出选择。

*(1.3.5)*当表达式中存在对同一个变量有多种不同优先级运算操作时,请注意,C语言并没有对这种“副作用1”作出明确的规定,而是由C编译器的编写者决定的。这个例子的教训是:如果你无法断定会不会产生副作用,那么就尽量不要写这样的表达式。

1.4 二进制位操作符

优先级:按位( & > ^ > | ) > 逻辑

1-4

	输出:31.4.131.4.211.4.311.4.411.4.5-11.4.601.4.781.4.8-81.4.9?1.4.10

在形式参数的前面加上一个“#”字符作为前缀,将使得实际参数被括在一对双引号里,C语言预处理器会自动将相邻的字符串合并

(1.4.10) 有些计算机在进行右移操作时不保留操作数的符号位,而且C语言本身也不保证移位操作的结果在数学意义上肯定是正确的。

1.5 关系操作符和条件操作符

优先级:关系( >、<、= )  >  条件 ( A ?  B : C)

1-4

	输出:31.5.121.5.23					
		 3					
		 41.5.34					
		 4					
		 01.5.411.5.5

1.6 操作符的优先级和条件操作符

短路与(&&)和 短路或(||)

1-61-6

	输出:2	1	11.4.12	2	11.4.22	2	21.4.30	-1	01.4.40	-1	01.4.50	0	-11.4.60	-1	-11.4.7

1-6-A

按照C语言里的有关规则,在按从左到右的顺序对一个逻辑表达式求值的时候,只要知道了它的实际结果,就不会对其余部分求值。(即短路&&存在一个为FALSE短路| |存在一个为(TRUE)

关联规则(即结合性)请看参照附录A

剩下的后续会慢慢更新哟~~

附录

A 运算符优先级

运算符优先级表


  1. 这里所说的“副作用”是指在执行一条本身并无语法错误的语句时会产生的难以确定的后果。C程序的副作用几乎都与变量的值(比如上面这个例子里的递增操作或一个赋值操作的计算结果)无法预料有关。 ↩︎

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言运算符优先级如下所示: 1. 后缀运算符:() \[\] -> 2. 一元运算符:++ -- + - ! ~ (type)* & sizeof 3. 乘除余运算符:* / % 4. 加减运算符:+ - 5. 移位运算符:<< >> 6. 关系运算符: < <= > >= 7. 相等运算符:== != 8. 位与运算符:& 9. 位异或运算符:^ 10. 位或运算符:| 11. 逻辑与运算符:&& 12. 逻辑或运算符:|| 13. 条件运算符:?: 14. 赋值运算符:= += -= *= /= %= >>= <<= &= ^= |= 15. 逗号运算符:, 需要注意的是,运算符优先级决定了它们在表达式中的计算顺序。在表达式中,较高优先级运算符会优先被计算。例如,对于表达式e = (a + b) * c / d,先计算括号内的加法,然后乘法,最后除法。\[1\]\[2\] 另外,C语言中还有一些特殊的运算符,如sizeof运算符用于获取变量或类型的大小,逗号运算符用于依次计算多个表达式并返回最后一个表达式的值。\[2\] 总结起来,C语言运算符优先级可以根据上述优先级表来确定,根据需要可以使用括号来改变运算的顺序。\[2\] #### 引用[.reference_title] - *1* *2* [C语言——运算符优先级](https://blog.csdn.net/liu17234050/article/details/104176911)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [【C语言基础】-运算符](https://blog.csdn.net/weixin_44247448/article/details/124077281)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值