📄 c++3.dat
字号:
第三章 运算符和表达式
第一节 C++运算符
所谓运算符就是指运算的符号,例如加运算符(+)、乘运算符(*)、取地址运算符(&)等.表达式与运算符密不可分,它由运算符与操作数组合而成,并由运算符指定对操作数要进行的运算,一个表达式的运算结果是一个值.本章中,我们将介绍C++语言基本的运算符、表达式,各种运算符的优先级、结合性,以及不同数据类型的值之间的转换.
C++提供的运算符有以下几种:算术运算符、关系运算符、逻辑运算符、位运算符、条件运算符、赋值运算符、逗号运算符、sizeof运算符及其它运算符(这是按功能分的).不同的运算符,需要指定的操作数的个数并不相同.根据运算符需要的操作数的个数,可将其分为三种:单目运算符(一个操作数)、双目运算符(两个个操作数)和三目运算符(三个操作数).下面,我们介绍几种基本的C++运算符.
1 基本的算术运算符
运算符 名字 实例
+ - * / %(取余)
2 自增、自减运算符
++是自增运算符,――自减运算符,这两个运算符都是单目运算符,且功能相近,都是将数值变量的值加1或减1,用户只能将这类操作符应用于变量而不能应用于常量.要替代下列代码
valuel=valuel+1;
可使用
++valuel;
或
valuel++;
这里前一种方式称为前缀方式,后一种称为后缀方式,其目的都是使valuel加1.二者的区别是:前缀式先将操作数增1(或减1),然后取操作数的新值参与表达式的运算.后缀是先将操作数增1(或减1)之前的值参与表达式的运算,到表达式的值被引用之后再做加1(或减1)运算.
3 关系运算符
运算符 名字
= = 等于
! = 不等于
< 小于
< = 小于等于
> 大于
> = 大于等于
4 逻辑运算符
C++提供了3种逻辑运算符,参见表3-5.如同关系运算符,用逻辑运算符组成的表达式的值或为1(表示true),或为0(表示false).
逻辑非(!)是单目运算符,它将操作数的逻辑值取反.即:如果操作数是非零,它使表达式的值为0;如果操作数是0,它使表达式的值为1.
运算符 操作数1 操作数2 表达式的值
--------------------------------------------------------
逻辑与(&&) true true true
false true false
true false false
false false false
逻辑或(||) true true true
false true true
true false true
false false false
5 位运算符
C++提供6种位运算符,可以进行二进制位的运算,参见表3-7.
位运算符要求操作数是整型数,并按二进制位的顺序来处理它们.取反运算符是单目运算符,其它位运算符是双目运算符.取反运算符(~)将操作数的二进制位逐位取反.逐位与运算符(&)比较两个操作数对应的二进制位,当两个二进制位均为1时,该位的结果取1,否则取0.逐位或运算符(|)比较两个操作数对应的二进制位,当两个二进制位均为0时,该位的结果取0,否则取1.逐位异或运算符(^)比较两个操作数对应的二进制位,当两个二进制位均为1或均为0时,该位的结果取0,否则取1.
逐位左移运算符(<<)和逐位右移运算符(>>)均有一个正整数n作为右操作数,将左操作数的每一个二进制位左移或右移n位,空缺的位设置为0或1.对于无符号整数或有符号整数,如果符号位为0(即为正数),空缺位设置为0;如果符号位为1(即为负数),空缺位是设置为0还是设置为1,要取决于所用的计算机系统.
位操作运算符是用来进行二进制位运算的运算符.它分为两类:逻辑位运算符和移位运算符.
1、逻辑位运算符
(1)单目逻辑位运算符:~(按位求反)
作用是将各个二进制位由1变0,由0变1.
(2)双目逻辑运算符:&(按位与),|(按位或),^(按位异或)
其中优先级&高于^,而^高于|.
& :两个都为1时结果为1.
| :两个其中有一个为1则结果为1.
^ :两个不同则结果为1,否则为0.
2、移位运算符
移位运算符有两个,<<(左移)、>>(右移).两个 都是双目运算符.
例. 指出下面表达式的功能.
(p&0377)|(k&0xff)<<8
将整数p的低字节作为作为结果的低字节,k的低字节作为结果的高字节拼成一个新的整数.
6 赋值运算符
=是赋值运算符,它的作用是将一个表达式的值赋给一个左值.一个表达式或者是一个左值,或者是一个右值.所谓左值是指一个能用于赋值运算左边的表达式.左值必须能够被修改,不能是常量.我们现在是用变量作左值,以后还可以看到,指针和引用也可以作左值.例如:
int a, b, c;
a=3;
b=4;
c = ( a + b )*(2*a - b) // 得出14
赋值运算符可与算术运算符和位运算符组合,产生许多变种,参见下表.
赋值运算本身也是一个表达式,即赋值表达式,该表达式的值是存储在赋值运算符左边变量中的值.一个赋值表达式能作为另一个赋值表达式的右操作数,多个赋值运算符能够连接在一个表达式中.例如:
int m, n, p;
m = n = p = 100; // 即: n = (m = (p = 100));
m = (n = p = 100) + 2; // 即: m = (n = (p = 100)) + 2;
m += n = p = 10; // 即: m = m + (n = p = 10);
运算符 实例 等价于
----------------------------------
= n = 2
+ = n += 2 n = n + 2
- = n -= 2 n = n - 2
* = n *= 2 n = n * 2
/ = n /= 2 n = n / 2
% = n %= 2 n = n % 2
& = n &= 0xA2F4 n = n & 0xA2F4
| = n |= 0xA2F4 n = n | 0xA2F4
^ = n ^= 0xA2F4 n = n ^ 0xA2F4
<< = n <<= 4 n = n << 4
>> = n >>= 4 n = n >> 4
7 求字节数运算符
C++提供了一个有用的运算符sizeof,它是一个单目运算符,用于计算表达式或数据类型的字节数,其运算结果与不同的编译器和机器相关.当编写用于进行文件输入/输出操作或给动态列表分配内存的程序时,用户将发现,如能知道程序给这些特定变量所分配内存的大小将会很方便. 例如3-1:
当我们进行算术运算时,如果运算结果超出变量所能表达的数据范围时,就会发生溢出.而利用sizeof运算符计算变量所占的字节数,也就是说,可以算出变量的数据范围,从而可以避免可能出现的错误. sizeof(char) 的值是 1
8 条件运算符
三目运算符只有一个,其一般形式为: 表式式1? 表达式2:表达式3
其中表达式1为条件表达式.如果表达式1为真,取表达式2的值;如果表达式1的值为假,取表达式3的值.
例如: max=a>b?a:b
如果a大于b,max=a
如果a不大于b,max=b
9 逗号运算符
C++语言提供一种特殊的运算符--逗号运算符.用它将两个表达式连接超来.如:3+5,6+8
称为逗号表达式,又称为"顺序求值运算符".逗号表达式的一般形式为: 表达式1,表达式2
逗号表达式的求解过程是:先求解表达式1,再求解表达式2.整个逗号表达式的值是表达式2的值.例如,上面的逗号表达 式"3+5,6+8"的值是14.又如,逗号表达式a=3*5,a*4对此 表达式的求解.首先计算表达式1a=3*5,值为15,在计算表式2 ,15*4,值为60.
一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式,如(a=3*5,a*4),a+5.先计算出a的值等于15,再进 行 a*4的运算得60(但a值未变,仍为15), 再进行a+5得20,即整个表达式的值为20.
逗号表达式的一般形式可以扩展为: 表达式1,表达式2,表达式3.......表达式n 它的值为表达式n的值.
10 可以利用强制类型转换运算符将一个表达式转换成所需类型.例如:
(double)a (将a转换成double类型)
(int)(x+y) (将x+y的值转换成整型)
(float)(5%3) (将5%3的值转换成float型)
其一般形式为: (类型名)(表达式) 注意,表达式应该用括号括起来.如果写成(int)x+y 则只将x转换成整型,然后与y 相加.
需要说明的是在强制类型转换时,得到一个所需类型的中间变量,原来变量的类型未发生变化.例如: (int)x (不要写成 int(x)).如果x原定为float型,进行强制类型运算后得到一个int型的中间变量,它的值等于x的整数部分,而x 的类型不 变(仍为float型)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -