[快速记忆]C语言/php的运算符优先级(结合性)

可以解决困惑!

PHP : $a = 12;

 $b = $a-- - --$a; // 2

C : int a=12 ,b;

  b = a-- - --a; //0

阅读<C陷阱与缺陷>, 看到书中对优先级记忆的精彩讲解, 总结下表.

另由于是php程序员, 所以对php的对应优先级做类似分析.

最后是用php和c中的?:结合性的不同解释"结合性"的问题.

不正确的地方请各位指出.

[cpp]  view plain copy
  1. * C语言运算符优先级(共计15个等级)  
  2.     1. 非运算符(函数调用, 复合数据结构取元素): "()""[]""->""."  
  3.     2. 单目运算符: "!""~""++""--""-""(type)"(类型转换), "*""&""sizeof"  
  4.     3. 双目运算符:  
  5.         1) 算术运算符:  
  6.             a) 乘除: "*""/""%"  
  7.             b) 加减: "+""-"  
  8.         2) 移位运算符: "<<"">>"  
  9.         3) 关系运算符:  
  10.             a) 大小比较: "<""<="">"">="  
  11.             b) 相等比较: "==""!="  
  12.         4) 逻辑运算符:  
  13.             a) 按位逻辑运算符:  
  14.                 * 按位与: "&"  
  15.                 * 按位异或: "^"  
  16.                 * 按位或: "|"  
  17.             b) 顺序逻辑运算符:  
  18.                 * 短路与: "&&"  
  19.                 * 短路或: "||"  
  20.     4. 三目运算符: "?:"  
  21.     5. 赋值运算符: "=""*=""/=""%=""+=""-=", ...等等  
  22.     6. 逗号运算符: ","  
  23. * C语言运算符结合性:   
  24.     1. 右结合: 单目运算符, 三目运算符, 赋值运算符  
  25.     2. 左结合: 第一条未列出所有运算符为左结合  
  26.   
  27.   
  28. * php运算符优先级(共计22个等级)  
  29.     1. 非运算符(复合数据结构取元素, 特殊运算符):  
  30.         1) 对象创建: "clone""new"  
  31.         2) 取复合结构元素: "[]"  
  32.     2. 单目运算符:   
  33.         1) 自增自减: "++""--"  
  34.         2) 类型转换, 错误抑制符, 取反运算符, 负号: "(type)"(类型转换), "@""~""-"  
  35.         3) 类型判定符: "instanceof"  
  36.         4) 逻辑非: "!"  
  37.     3. 双目运算符:  
  38.         1) 算术运算符:  
  39.             a) 乘除: "*""/""%"  
  40.             b) 加减: "+""-"  
  41.         2) 移位运算符: "<<"">>"  
  42.         3) 关系运算符:  
  43.             a) 大小比较: "<""<="">"">="  
  44.             b) 相等比较: "==""!=""===""!=="  
  45.         4) 逻辑运算符:  
  46.             a) 按位逻辑运算符:  
  47.                 * 按位与: "&"  
  48.                 * 按位异或: "^"  
  49.                 * 按位或: "|"  
  50.             b) 顺序逻辑运算符:  
  51.                 * 短路与: "&&"  
  52.                 * 短路或: "||"  
  53.     4. 三目运算符: "?:"  
  54.     5. 赋值运算符: "=""*=""/=""%=""+=""-=", ...等等  
  55.     6. 低优先级逻辑运算符:  
  56.         * 与: "and"  
  57.         * 异或: "xor"  
  58.         * 或: "or"  
  59.     7. 逗号运算符: ","  
  60. * php运算符结合性:  
  61.     1. 无结合性: 对象创建, 自增自减, 类型判定符, 关系运算符  
  62.     2. 右结合: 第一条中没有列出的单目运算符, 赋值运算符  
  63.     3. 左结合: 前面两条未列出的所有运算符均为左结合  
  64.   
  65.   
  66. * C语言和PHP中的三目运算符结合性差异比较  
  67.     1. C语言中"?:"为右结合  
  68.     2. php中"?:"为左结合  
  69.     3. 实例: printf("%d\n", 1 ? 2 : 3 ? 4 : 5);  
  70.         1) C语言中解析: 先运算最后一个"?:", 将最后一个?之前的表达式看作整体  
  71.             printf("%d\n", (1 ? 2 : 3) ? 4 : 5);  
  72.             /* 结果: 4 */  
  73.         2) php中解析: 先运算第一个"?:", 将第一个:之后的表达式看作整体  
  74.             printf("%d\n", 1 ? 2 : (3 ? 4 : 5));  
  75.             /* 结果: 2 */  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值