【学习笔记】【C语言】三目运算符
2015-06-08 20:33
92 查看
1.N目运算符
像逻辑非(!)、负号(-)这种只连接一个数据的符号,称为“单目运算符”,比如!5、-5。
像算术运算符、关系运算符、逻辑运算符这种连接二个数据的负号,称为“双目运算符”,比如6+7、8*5、5>6、4 && 0、
以此类推,连接3个数据的运算符,应该称为“三目运算符”
2.三目运算符
C语言提供了唯一一个三目运算符:条件运算符。
1> 使用格式
表达式A ? 表达式B : 表达式C
2> 运算结果
如果表达式A成立,也就是为“真”,条件运算符的结果就是表达式B的值,否则,就为表达式C的值
3> 结合方向和优先级
优先级顺序为:算术运算符 > 关系运算符 > 条件运算符 > 赋值运算符
条件运算符的结合方向是“从右至左”
上面的代码等价于
简化一下就是
继续简化为
所以a的值是11
像逻辑非(!)、负号(-)这种只连接一个数据的符号,称为“单目运算符”,比如!5、-5。
像算术运算符、关系运算符、逻辑运算符这种连接二个数据的负号,称为“双目运算符”,比如6+7、8*5、5>6、4 && 0、
以此类推,连接3个数据的运算符,应该称为“三目运算符”
2.三目运算符
C语言提供了唯一一个三目运算符:条件运算符。
1> 使用格式
表达式A ? 表达式B : 表达式C
2> 运算结果
如果表达式A成立,也就是为“真”,条件运算符的结果就是表达式B的值,否则,就为表达式C的值
3> 结合方向和优先级
优先级顺序为:算术运算符 > 关系运算符 > 条件运算符 > 赋值运算符
条件运算符的结合方向是“从右至左”
int a = 3>4 ? 4+5 : 5>4 ? 5+6 : 6>7+1;
上面的代码等价于
int a = (3>4) ? (4+5) : ( (5>4) ? (5+6) : (6>(7+1)) );
简化一下就是
int a = 0 ? 9 : ( 1 ? 11 : 0 );
继续简化为
int a = 0 ? 9 : 11;
所以a的值是11
// 三目运算符 条件 ? 数值1 : 数值2 //int a = !100 ? 9 : 89; //printf("a=%d\n", a); #include <stdio.h> int main() { /* 计算2个整数之间的最大值 int a = 10; int b = 99; int c = a>b ? a : b; printf("c is %d\n", c); */ // 计算3个整数之间的最大值 int a = 10; int b = 999999; int c = 1000; // 求出a、b的最大值 int abMax = (a > b) ? a : b; // 求出最终的最大值 int d = (abMax > c) ? abMax : c; //int d = (((a > b) ? a : b) > c) ? ((a > b) ? a : b) : c; printf("d is %d\n", d); return 0; }
相关文章推荐
- C++vector容器用法详解
- zerglurker的C语言教程003——基本数据类型
- C++编译常见错误
- C语言 gets()和scanf()函数的区别
- C++对C的函数拓展 - 占位参数
- C++对C的函数拓展 - 占位参数
- C++对C的函数拓展 - 默认参数
- C++对C的函数拓展 - 默认参数
- 值得推荐的C/C++框架和库
- C语言自学的方法
- 普通Android工程转换为C/C++工程之后 再还成Android工程的解决方案
- C++ 函数模板示例 2 (配合decltype)
- c++解决 {ctor}构造函数不能有返回类型或者无故缺少“;”(在“using”的前面)的问题
- 虚析构函数
- 使用VC++压缩解压缩文件夹
- Zip Utils - clean, elegant, simple, C++/Win32
- C++中如何在一个构造函数中调用另一个构造函数
- C++中的Lambda表达式详解
- C++在Ubuntu上编译mysql问题
- C++——拼接+=