1.条件运算符“? :”

是C++中唯一的三目运算符,其形式为:     表达式1 ?表达式2 :表达式3

运算方式为:先计算表达式1的值,如果其值为非0(真), 则表达式2的值就是整个表达式的最终结果;否则表达式3的值就是整个表达式的值

表达式1是bool类型,表达式2、3的类型可以不同,条件表达式的最终类型为 2 和 3 中较高的类型。 例如:用条件运算符定义求两个数a和b的最大值

#include<iostream>
using namespace std;
int main()
{int a = 3;int b = 4;int max = a > b ? a : b;cout << "第一种表达方式结果max=" << max << endl;int max2 = ((a > b) ? a : b);cout << "第二种表达方式结果max2=" << max2 << endl;system("pause");return 0;
}

输出结果截图

可见,即使不加()对运算顺序做区分,三目运算符也遵循以下规则

1.2-条件运算符的结合性是自右向左

- a>b?a:c>d?c:d     相当于:  a>b?a:(c>d?c:d)

1.3-条件运算符的优先级别高于赋值运算符,低于关系运算符和算术运算符

- 例如:a>b?a-b:b-a   相当于:  (a>b)?(a-b):(b-a)


c


2.逗号运算符

- 格式:表达式1,表达式2,…,表达式n

- 求解顺序及结果: 先求解表达式1,再求解表达式2,最后求解表达式n的值 最终结果为表达式n的值

   例如:    d1,d2,d3,d4 此处,d1、d2、d3、d4都是一个表达式

- 整个表达式的值由最后一个表达式的值d4决定

- 计算顺序是从左至右依次计算各个表达式的值,最后计算的表达式的值和类型便是整个表达式的值和类型

例程1:

#include<iostream>
using namespace std;
int main()
{int a = 1, b, c;//int a=1; b,c也是int类型只不过没有在这一行初始化a = (b = a + 1, c = b + 1, a = c + 1) + a;//a=(b=2,c=2+1,a=3+1)+4//b = (a = c + 1, c = a + 2, b = a + 1) + b;//a=(a=2+1 +1,c=2+1+1 +2,b=4+1)+5cout << "a=" << a << "   "  << "b=" <<b<< "   " <<"c="<< c << endl;//a=8,b=2,c=3system("pause");return 0;
}

输出的a=?,b=?


-原理

*使用逗号运算符是为了把几个表达式放在一起

*整个逗号表达式的值为系列中最后一个表达式的值

*从本质上讲,逗号的作用是将一系列运算按顺序执行

<表达式1>  <表达式2>

/*求解过程是:先求解表达式 1,再求解表达式 2。整个逗号表达式的值是表达式 2 的值

最右边的那个表达式的值将作为整个逗号表达式的值,其他表达式的值会被丢弃*/

int a = 1, b, c;//int a=1; b,c也是int类型只不过没有在这一行初始化
    a = (b = a + 1, c = b + 1, a = c + 1) + a;//a=8

在这里,首先把括号里的b赋值为a+1(1+1=2),把c赋值为b+1(2+1=3),把a赋值为c+1(2+1=3),尽管如此,还是取最右边的表达式,也就是a=c+1=(2+1)+(a+1)+1=,最后加上a的值a

值经过括号内的三个表达式赋值,已全部更新,b=2,c=3,a=4,取最右边的a=4和括号外的+a进行运算,则a=a+a=4+4=8;

这里有迭代赋值的思想,总之更新变量就行

下面这个例子充分体现了逗号运算符只取最右边表达式的结果

int x = 1;
    x = (x + 1, x + 2, x + 3) + x;//(1+3)+1=5,(x+3)+x;
    cout << "x=" <<x<< endl;//x=5(运行结果)


b,c没有初始化,默认值是0,不信的话,运行下面这段代码,结果跟上面那段代码是一样的

#include<iostream>
using namespace std;
int main()
{int a = 1;int b = 0;int c = 0;a = (b = a + 1, c = b + 1, a = c + 1) + a;//a=(b=2,c=2+1,a=3+1)+4//b = (a = c + 1, c = a + 2, b = a + 1) + b;//a=(a=2+1 +1,c=2+1+1 +2,b=4+1)+5cout << "a=" << a << "   "  << "b=" <<b<< "   " <<"c="<< c << endl;//a=8,b=2,c=3system("pause");return 0;
}

var = (count=19, incr=10, count+1);

在这里,首先把 count 赋值为 19,把 incr 赋值为 10,然后把 count 加 1,最后,把最右边表达式 count+1 的计算结果 20 赋给 var。上面表达式中的括号是必需的,因为逗号运算符的优先级低于赋值操作符

int x1 = 1;
    int x2 = 2;
    int x3 = 3;
    int y = (x1 =x2+ 1, x2 =x1+ 1, x3=x2 + 1) + 1;//(x1=3,x2=1+1=2,x3=x1+1+1
    int y1 = (x1 = 1, x2 = 4, x3 = x2+6) + x3;
    cout << "y1=" << y1 << endl;//y1=20(运行结果)
    cout << "y=" << y << endl;//y=6(运行结果)

解析1:

int y = (x1 =x2+ 1, x2 =x1+ 1, x3=x2 + 1) + 1

这一段含逗号运算符的括号内与最右边的表达式x3=x2+1有关的数据是:

x2,而x2=x1+1,这里的x1=x2+1  涉及到了前两个左边的表达式,所以依次计算

x1=x2+1=2+1=3         - ->                     x2=x1+1=3+1=4        -->                      x3=x2+1=4+1=5

最后再加上括号外的值1,就是y=5+1=6

解析2:

int y1 = (x1 = 1, x2 = 4, x3 = x2+6) + x3;

这一段含逗号运算符的括号内与最右边表达式x3=x2+6相关的数据是

x2,而x2与x2=4相关

所以括号内的最右边表达式结果为x3=4+6=10

最后在加上括号外的x3的最新值也是x3=4+6=10

最后y1=10+10=20

​​​​​​​这种方法应该叫倒推法叭~


尝试运行下面的实例,理解逗号运算符的用法

#include <iostream>
using namespace std;int main()
{int i, j;j = 10;i = (j++, j+100, 999+j);cout << i;return 0;
}

这个程序中,j 最初的值为 10,然后自增到 11,接着再加上 100 并将结果赋值给 j,最后 j 再加上 999,得出结果 1110

C++条件运算符(三目运算符+逗号运算符)案例实练相关推荐

  1. C语言基础 | 逗号运算符和三目运算符

    看一段代码 int main() {int a = 0;int b = -1;int c = (a + 1, b += 1) ? a += 1 : b ? a : a + 1;printf(" ...

  2. javaScript学习笔记之比较运算符||逻辑运算符||条件运算符(三目运算符)

    比较运算符在逻辑语句中使用,以测定变量或值是否相等. 逻辑运算符用于测定变量或值之间的逻辑. javaScript基于某些条件对变量进行赋值的条件运算符(三目运算符). HTML: <!DOCT ...

  3. C++primer 第 4 章 表达式 4.7条件运算符 4.8位运算符 4.9 sizeof运算符 4.10逗号运算符 4.11类型转换 4 . 1 2 运算符优先级表

    4.7条件运算符 条件运算符(?:)允许我们把简单的if else逻辑嵌入到单个表达式当中,条件运算符按照如下形式使用: cond ? expr1 : expr2;其中cond是判断条件的表达式,而e ...

  4. html5 三目运算符,三目运算符和逗号运算符

    一.三目运算符 三元运算符一般用的很少,因为它在程序段中的可读性很差,所以笔者建议不要经常使用三元运算符,但很少使用并不代表不使用,所以还是要掌握好它的用法,三元运算符的表达形式如下: 布尔表达式?值 ...

  5. C语言——赋值运算符、复合的赋值运算符、自增自减运算符、逗号运算符、条件运算符、goto语句、注释

    目录 一.赋值运算符 二.复合的赋值运算符 三.自增自减运算符 四.逗号运算符 逗号表达式的语法 五.条件运算符 六.goto语句 七.注释 一.赋值运算符 语法: - int a; - a = 5; ...

  6. c语言等号 逗号,C语言逗号运算符和逗号表达式

    在C语言中逗号","也是一种运算符,称为逗号运算符. 其功能是把两个表达式连接起来组成一个表达式, 称为逗号表达式.其一般形式为:表达式1,表达式2 其求值过程是分别求两个表达式的 ...

  7. C语言中的逗号的作用,C语言逗号运算符和逗号表达式基础总结

    逗号运算符的作用: 1,起分隔符的作用: 定义变量用于分隔变量:int a,b 输入或输出时用于分隔输出表列 printf("%d%d",a,b) 2,用于逗号表达式的顺序运算符 ...

  8. c语言逗号的作用情况,C语言逗号运算符和逗号表达式基础总结

    逗号运算符的作用: 1,起分隔符的作用: 定义变量用于分隔变量:int a,b 输入或输出时用于分隔输出表列 printf("%d%d",a,b) 2,用于逗号表达式的顺序运算符 ...

  9. php 逗号运算符,基础篇PHP运算符总结宝典

    PHP是我们开发语言之一,它有强大的功能,文章这里就给喜欢PHP的朋友介绍一下PHP运算符.PHP和其他高级语言一样,有很多种PHP运算符.包括算数运算符.赋值运算符.字符串运算符.自增自减运算符.逻 ...

最新文章

  1. (DOM艺术) 实用的动画
  2. Dynamics CRM2013 自定义开发工具 Dynamics XRM Tools 介绍
  3. 计算机二级c语言考生文件夹在哪,2017年全国计算机二级C语言考试题
  4. oracle z中rowid,oracle 10g中的ROWID
  5. 网络编程释疑之:TCP协议的“流”特性
  6. Axure之全局变量
  7. Android之back键拦截处理
  8. java keygenerator_Java密码学KeyGenerator类
  9. 修改注册表来修改IE的设置---资料汇总
  10. remote collaboration on physical tasks 应用
  11. h5是什么 www.php.cn,html5是什么?html5有什么用?
  12. 如何打开大型文本文件
  13. 东方卫视收视率查询_全国电视台收视率排行榜
  14. 英特尔傲腾持久内存 Optane DC Persistent Memory Module
  15. 如何安装CentOS 8
  16. MacOS自带ssh+XQuartz连接OpenBSD6.5
  17. ev4视频转换为mp4工具使用教程
  18. A股股票列表数据API接口(JSON标准格式,Get请求方式)
  19. 微信小程序wx.onLocationChange的使用,并计算移动距离
  20. linux deploy目录形式,安装Linux Deploy

热门文章

  1. Android Launcher启动过程
  2. 计算机更换硬盘键盘鼠标不好使,电脑键盘和主板不兼容解决方法
  3. [Pandas] 分组比例计算求和
  4. 新一代垃圾回收器ZGC
  5. HTTP请求方法详解
  6. 计算机网络(三):IP协议,路由器转发,路由器和交换机的区别
  7. 平阴县实验学校计算机老师,人物 | 平阴县实验学校邢珍:认认真真做事,踏踏实实做人...
  8. java怎样定义一个对象数组,java定义一个对象数组
  9. 用html做网站古诗春思,春思古诗词
  10. PC的ARM的安全启动