[快速记忆]C语言/php的运算符优先级(结合性)
2013-02-21 17:00
267 查看
可以解决困惑!
PHP : $a = 12;
$b = $a-- - --$a; // 2
C : int a=12 ,b;
b = a-- - --a; //0
阅读<C陷阱与缺陷>, 看到书中对优先级记忆的精彩讲解, 总结下表.
另由于是php程序员, 所以对php的对应优先级做类似分析.
最后是用php和c中的?:结合性的不同解释"结合性"的问题.
不正确的地方请各位指出.
[cpp] view
plaincopy
* C语言运算符优先级(共计15个等级)
1. 非运算符(函数调用, 复合数据结构取元素): "()", "[]", "->", "."
2. 单目运算符: "!", "~", "++", "--", "-", "(type)"(类型转换), "*", "&", "sizeof"
3. 双目运算符:
1) 算术运算符:
a) 乘除: "*", "/", "%"
b) 加减: "+", "-"
2) 移位运算符: "<<", ">>"
3) 关系运算符:
a) 大小比较: "<", "<=", ">", ">="
b) 相等比较: "==", "!="
4) 逻辑运算符:
a) 按位逻辑运算符:
* 按位与: "&"
* 按位异或: "^"
* 按位或: "|"
b) 顺序逻辑运算符:
* 短路与: "&&"
* 短路或: "||"
4. 三目运算符: "?:"
5. 赋值运算符: "=", "*=", "/=", "%=", "+=", "-=", ...等等
6. 逗号运算符: ","
* C语言运算符结合性:
1. 右结合: 单目运算符, 三目运算符, 赋值运算符
2. 左结合: 第一条未列出所有运算符为左结合
* php运算符优先级(共计22个等级)
1. 非运算符(复合数据结构取元素, 特殊运算符):
1) 对象创建: "clone", "new"
2) 取复合结构元素: "[]"
2. 单目运算符:
1) 自增自减: "++", "--"
2) 类型转换, 错误抑制符, 取反运算符, 负号: "(type)"(类型转换), "@", "~", "-"
3) 类型判定符: "instanceof"
4) 逻辑非: "!"
3. 双目运算符:
1) 算术运算符:
a) 乘除: "*", "/", "%"
b) 加减: "+", "-"
2) 移位运算符: "<<", ">>"
3) 关系运算符:
a) 大小比较: "<", "<=", ">", ">="
b) 相等比较: "==", "!=", "===", "!=="
4) 逻辑运算符:
a) 按位逻辑运算符:
* 按位与: "&"
* 按位异或: "^"
* 按位或: "|"
b) 顺序逻辑运算符:
* 短路与: "&&"
* 短路或: "||"
4. 三目运算符: "?:"
5. 赋值运算符: "=", "*=", "/=", "%=", "+=", "-=", ...等等
6. 低优先级逻辑运算符:
* 与: "and"
* 异或: "xor"
* 或: "or"
7. 逗号运算符: ","
* php运算符结合性:
1. 无结合性: 对象创建, 自增自减, 类型判定符, 关系运算符
2. 右结合: 第一条中没有列出的单目运算符, 赋值运算符
3. 左结合: 前面两条未列出的所有运算符均为左结合
* C语言和PHP中的三目运算符结合性差异比较
1. C语言中"?:"为右结合
2. php中"?:"为左结合
3. 实例: printf("%d\n", 1 ? 2 : 3 ? 4 : 5);
1) C语言中解析: 先运算最后一个"?:", 将最后一个?之前的表达式看作整体
printf("%d\n", (1 ? 2 : 3) ? 4 : 5);
/* 结果: 4 */
2) php中解析: 先运算第一个"?:", 将第一个:之后的表达式看作整体
printf("%d\n", 1 ? 2 : (3 ? 4 : 5));
/* 结果: 2 */
PHP : $a = 12;
$b = $a-- - --$a; // 2
C : int a=12 ,b;
b = a-- - --a; //0
阅读<C陷阱与缺陷>, 看到书中对优先级记忆的精彩讲解, 总结下表.
另由于是php程序员, 所以对php的对应优先级做类似分析.
最后是用php和c中的?:结合性的不同解释"结合性"的问题.
不正确的地方请各位指出.
[cpp] view
plaincopy
* C语言运算符优先级(共计15个等级)
1. 非运算符(函数调用, 复合数据结构取元素): "()", "[]", "->", "."
2. 单目运算符: "!", "~", "++", "--", "-", "(type)"(类型转换), "*", "&", "sizeof"
3. 双目运算符:
1) 算术运算符:
a) 乘除: "*", "/", "%"
b) 加减: "+", "-"
2) 移位运算符: "<<", ">>"
3) 关系运算符:
a) 大小比较: "<", "<=", ">", ">="
b) 相等比较: "==", "!="
4) 逻辑运算符:
a) 按位逻辑运算符:
* 按位与: "&"
* 按位异或: "^"
* 按位或: "|"
b) 顺序逻辑运算符:
* 短路与: "&&"
* 短路或: "||"
4. 三目运算符: "?:"
5. 赋值运算符: "=", "*=", "/=", "%=", "+=", "-=", ...等等
6. 逗号运算符: ","
* C语言运算符结合性:
1. 右结合: 单目运算符, 三目运算符, 赋值运算符
2. 左结合: 第一条未列出所有运算符为左结合
* php运算符优先级(共计22个等级)
1. 非运算符(复合数据结构取元素, 特殊运算符):
1) 对象创建: "clone", "new"
2) 取复合结构元素: "[]"
2. 单目运算符:
1) 自增自减: "++", "--"
2) 类型转换, 错误抑制符, 取反运算符, 负号: "(type)"(类型转换), "@", "~", "-"
3) 类型判定符: "instanceof"
4) 逻辑非: "!"
3. 双目运算符:
1) 算术运算符:
a) 乘除: "*", "/", "%"
b) 加减: "+", "-"
2) 移位运算符: "<<", ">>"
3) 关系运算符:
a) 大小比较: "<", "<=", ">", ">="
b) 相等比较: "==", "!=", "===", "!=="
4) 逻辑运算符:
a) 按位逻辑运算符:
* 按位与: "&"
* 按位异或: "^"
* 按位或: "|"
b) 顺序逻辑运算符:
* 短路与: "&&"
* 短路或: "||"
4. 三目运算符: "?:"
5. 赋值运算符: "=", "*=", "/=", "%=", "+=", "-=", ...等等
6. 低优先级逻辑运算符:
* 与: "and"
* 异或: "xor"
* 或: "or"
7. 逗号运算符: ","
* php运算符结合性:
1. 无结合性: 对象创建, 自增自减, 类型判定符, 关系运算符
2. 右结合: 第一条中没有列出的单目运算符, 赋值运算符
3. 左结合: 前面两条未列出的所有运算符均为左结合
* C语言和PHP中的三目运算符结合性差异比较
1. C语言中"?:"为右结合
2. php中"?:"为左结合
3. 实例: printf("%d\n", 1 ? 2 : 3 ? 4 : 5);
1) C语言中解析: 先运算最后一个"?:", 将最后一个?之前的表达式看作整体
printf("%d\n", (1 ? 2 : 3) ? 4 : 5);
/* 结果: 4 */
2) php中解析: 先运算第一个"?:", 将第一个:之后的表达式看作整体
printf("%d\n", 1 ? 2 : (3 ? 4 : 5));
/* 结果: 2 */
相关文章推荐
- [快速记忆]C语言/php的运算符优先级(结合性)
- 从C语言快速学PHP
- c语言之运算符的优先级快速记忆
- Java运算符优先级及结合性与C语言之比较
- 关于C语言中的运算符的优先级和结合性
- Linux下C语言的快速入手
- 快速开发一个PHP扩展图文教程
- 基于PHP的cURL快速入门(2)
- 如何快速搭建phpfreechat(配视频教程)
- 用星际快速入门PHP面向对象编程(修订版)
- linux下 C语言对 php 扩展
- 快速解决php启动报错127.0.0.1:9000端口占用问题
- [李景山php] C语言实现简单五子棋
- Linux/Ubuntu下C语言开发PHP的.so扩展模块过程
- 从其他语言快速学习php系列文章
- 常见排序算法(冒泡,选择,快速)的C语言实现
- PHP进阶,使用交互模式进行快速测试实验?
- 《APMServ 5.2.6》:一键快速搭建Apache+PHP+MySQL+Nginx+Memcached+ASP平台的绿色软件[转]
- 快速学习php
- php 服务器快速搭建