第6讲——运算符

这一讲,咱们来个运算符大杂烩。

 

我们不是大牛,只是因为你没付出1W小时的努力,而不是你笨!

 

【算术运算符】

 

  • 优先级高于关系运算符
  •  五种基本算术运算符:+ - * / %
  • 优先级:* / %优先级相同,自左向右结合

 

【逻辑运算符】

  • 优先级:! > && > ||
  • &&运算符和||运算符的优先级都低于关系运算符
  • !运算符的优先级高于所有的关系运算符和算术运算符

 

【?:运算符】

  • 条件运算符
  • 唯一一个需要3个操作数的运算符
  • ?:运算符生成一个表达式,因此是一个值,可以将其赋给变量或将其放到一个更大的表达式中
  • 技巧:将条件表达式嵌套在另一个条件表达式中(增加读程序的复杂性)

 

【逗号运算符】

  • 实质上,就是把两个或者多个表达式放一起,会被编译器认为是一个表达式。

表达式的定义:任何值或任何有效的值和运算符的组成是表达式。

 

以下不是表达式:

int a , b ; 其中a,b分别是一个变量,

我们可以int a; int b; 这样是声明a是int类型,b是int类型。 

也可以int a, b; 这样是声明a和b都是int类型。

在这里有点类似 “和” 的意思。——但记住,不是每个都可以这么理解,特别是在输出 表达式的值 的时候

 

以下是表达式:

例如在for循环语句里,小括号里面的三个语句,是被分号隔起来的。

for(i=1;i<5;i++)

其中i=1、i<5和i++都是表达式。

这三个表达式,也可以用逗号运算符。

上代码:

#include<iostream>
using namespace std;
int main()
{
	int a,b;
	for (a=1,b=3;a<2,b<6;a++,b++)
	{
		cout << "第" << a << "遍循环" << endl;
		cout << a << endl;
		cout << b << endl;
	}
	cout << "循环已经结束" << endl;
	cout << a << endl;
	cout << b << endl;
	return 0;
}

执行程序:

 

问题:

①从结果来看,结束循环是因为b不小于6,而不是a<2。

即:逗号前的判断 未满足 并没有影响到判断,逗号后的判断 未满足 ,循环结束。即a<2并没有影响结果。

——这里有一种猜想,是不是因为两个表达式都不满足后,循环结束。至少满足一个表达式,循环继续进行。

然而,在测试中被否决,在另外一个for中,第一个表达式满足,第二个表达式不满足,循环结束。——即只有一个表达式不满足,但循环依然结束。

另外,在之前,我们分析到for语句的判断语句,是将表达式转为bool类型,满足值为1,不满足值为0,当值为0时结束判断语句。

 最后发现:

第一个表达式是否满足,并不影响循环执行;

若第二个表达式的值为false,则循环停止。

 ②因此,逗号运算符,在for循环判断语句的时候,不能理解为“和”,这就涉及到,由逗号运算符连接多个表达式一起的话,这个表达式的值为什么。

见下一部分。

 

逗号前后多个表达式的值(表达式的值):

假如逗号将两个表达式连接在一起,如a<3,b<4;

那么这个表达式的值为多少?

上代码:

#include<iostream>
int main()
{
	using namespace std;
	int a = 1, b = 5, c;
	cout.setf(ios_base::boolalpha);
	cout << "(a < 4, b>6) = " << (a < 4, b>6) << endl;	//逗号前a<4是true,逗号后b>6是flase
	cout << "(a = 3, b = 9) = " << (a = 3, b = 9) << endl;
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	cout << "(a = 3, b = 9 , c=5 ) = " << (a = 3, b = 9, c = 5) << endl;
	return 0;
}

执行程序:

结论:

①有逗号参与的多个表达式,他们的值永远表现的是最后一个表达式的值。

②因此,在for循环语句的判断语句中,是否执行循环,判断的是最后一个表达式的值是true还是false。

③变量名=30这种形式的表达式,值为30。

 

posted @ 2017-08-16 19:16  GGBeng  阅读(212)  评论(0编辑  收藏  举报