C++之运算符
继续进行C++的学习:
运算符:
运算符可以用来对常量和变量进行操作,下面是所有的运算符(教程上说是所有的,我持有怀疑态度):
**
- 赋值运算符:
**
x = 5;
此语句将整数5值赋给变量x。赋值操作总是从右到左进行,而不是相反:
x = y;
将y赋值给x。
例如:
// assignment operator#include <iostream>using namespace std;
int main ()
{
int a, b; // a:?, b:?
a = 10; // a:10, b:?
b = 4; // a:10, b:4
a = b; // a:4, b:4
b = 7; // a:4, b:7
cout << "a:";
cout << a;
cout << " b:";
cout << b;
}
结果是:
a:4 b:7
这个程序显示在屏幕上的结果是a,b的最终结果(4和7).请注意即使我们中间声明了a = b,但是这并不影响之后对b的赋值。
这表明赋值后的表达式本身是具有值的,赋值本身也是可以操作的,也是可以操作的,例如:
y=2+(x=5);
在这个表达式中y的值将是另一个表达式的值(5)叫上2的结果。它大致相当于
x = 5;
y = 2 + x;
将最终将7分配给y;
一下表达式也是有效的:
x = y = z = 5;
它将三个变量x,y和z的值都分配成5,总是从左到右进行。
**
- 算数运算符
**
运算符 描述
+ 加法
- 减法
* 乘法
/ 除法
% 模
加法,减法,乘法和除法的运算按字面对应于它们各自的数学运算符。最后一个模数运算符,由百分号(%)表示,给出两个值除法的余数。例如:
x = 11 % 3;
导致变量x值成为2,因为将11除以3得到3,余数为2。
**
- 复合赋值(+ =, - =,* =,/ =,%=,>> =,<< =,&=,^ =,| =)
**
复合赋值运算符通过对变量执行操作来修改变量的当前值。它们相当于将操作的结果赋给第一个操作数:
表达 相当于
y += x; y=y+x
x -=5 x = x-5
x /=y x =x/y
price *= units + 1 price = price*(units + 1)
例子:
// compound assignment operators#include <iostream>using namespace std;
int main ()
{
int a, b=3;
a = b;
a+=2; // equivalent to a=a+2
cout << a;
}
输出结果是:5
**
- 递增和递减
**
递增运算符(++)和递减运算符(–)将存储在变量中的值加1或者减1。
注意其中:
b=++a;表示先将a加一再进行赋值运算
B=a++;表示先进行赋值运算再将a加一
**
- 关系和比较运算符(==,!=,>,<,> =,<=)
**
关系运算符的结果用bool类型的值来表示,即false和true
这里有一些例子:
(7 == 5) // evaluates to false
(5 > 4) // evaluates to true
(3 != 2) // evaluates to true
(6 >= 6) // evaluates to true
(5 < 5) // evaluates to false
当然,不仅可以比较数字常数,而且只是任何值,当然还包括变量。假设a=2,b=3和c=6,则
(a == 5) // evaluates to false, since a is not equal to 5
(a*b >= c) // evaluates to true, since (2*3 >= 6) is true
(b+4 > a*c) // evaluates to false, since (3+4 > 2*6) is false
((b=2) == a) // evaluates to true
注意,最后一个表达式中,先将2赋值给b,再和a比较,得到true
**
- 逻辑运算符(!,&&,||)
**
逻辑运算符是针对bool类型的运算符,例如:
!(5 == 5) // evaluates to false because the expression at its right (5 == 5) is true
!(6 <= 4) // evaluates to true because (6 <= 4) would be false
!true // evaluates to false
!false // evaluates to true
逻辑运算符&&和||的结果:
&&和运算符
a b a&&b
true true true
true false false
false true false
false false false
||或运算符
a b a||b
true true true
true false true
false true true
false false false
例如:
( (5 == 5) && (3 > 6) ) // evaluates to false ( true && false )
( (5 == 5) || (3 > 6) ) // evaluates to true ( true || false )
当使用逻辑运算符时,C ++仅评估从左到右所需的内容以得出组合的关系结果,忽略其余的结果。因此,在最后一个例子中((55)||(3>6)),C ++评估第一是否55是true,如果是这样,它永远不会检查是否3>6是true或不是。这称为短路评估,对于这些运算符来说是这样的:
&& 如果左侧的表达式是false,则组合结果是false
|| 如果左侧的表达式是true,则组合结果是true
当右侧的值更改时会有副作用,例如
if ( (i<10) && (++i<n) ) { /…/ } // note that the condition increments i
**
- 三元运算符(?)
**
condition ? result1 : result2
如果condition是true,则整个表达式的计算结果为result1,否则为result2。
**
- 逗号运算符(,)
**
逗号运算符(,)用于分隔两个或多个表达式,这些表达式只包含一个表达式。当必须针对值计算表达式集时,仅考虑最右侧的表达式。
例如,以下代码:
a = (b=3, b+2);
首先将值3分配给b,然后分配b+2给变量a。因此,最后,变量a值为5,而变量b值为3。
**
- 按位运算符(&,|,^,〜,<<,>>)
**
位运算符考虑表示它们存储的值的位模式来修改变量。
运算符 等价 描述
& AND 按位与
| OR 按位或
^ XOR 按位异或
~ NOT 一元补码(位反转)
<< SHL 位左移
>> SHR 位右移
**
**-
- 显示类型转换运算符
**
**
类型转换运算符允许将给定类型的值转换为另一种类型。在C ++中有几种方法可以做到这一点。最简单的一个,它是从C语言继承而来的,是在(括号与)括号之间的类型转换:
int i;
float f = 3.14;
i = (int) f;
前面的代码将浮点数转换为3.14整数值(3); 剩下的就丢了。这里类型转换操作符是(int)。在C ++中执行相同操作的另一种方法是在使用表达式之前的函数表示法按类型转换并将表达式括在括号中:
i = int(f);
两种类型转换在C++中都是有效的。
sizeof
此运算符接受一个参数,该参数可以是类型或变量,并返回该类型或对象的字节大小:
x = sizeof (char);
这里,x赋值为1,因为char是一个大小为一个字节的类型。
返回的值sizeof是编译时常量,因此始终在程序执行之前确定。
- 其他运算符
没有写只说在后面的教程中会有。
- 运算符的优先级
单个表达式可能有多个运算符。例如:
x = 5 + 7 % 2;