四、表达式
1、什么是表达式?
表达式由一个或者多个操作数构成。更一般情况下,表达式要加上操作数之间的操作【操作符】。
ivec[ size/2 ] * delta
作用在一个操作数上的操作符叫做一元操作符,同理,作用在两个操作数上的叫做二元操作符。一般来说,表达式的结果是右值。
表达式的结果一般由子表达式的计算顺序决定,所以我们要了解操作符的优先级和结合性。
2、算术操作符
| 操作符 | 功能 | 用法 |
| * | 乘 | a*b |
| / | 除 | a/b |
| % | 取余 | a%b |
| + | 加 | a+b |
| - | 减 | a-b |
如果使用了int类型,那么小数的部分会被裁掉:
int ival1 = 21 / 6; // 3
取余操作不能用于浮点数类型【取余操作后的值一定是整数】:
1、如果都是正数,那么结果为正;
2、如果有负数存在,那么最后取余的正负号由机器决定【不同机器产生结果不同】;
算术异常情况:除以0或者结果溢出【结果的值超过了该类型长度】
显式类型转换:显式地转换对象的数据类型
char byte_value = 0 ;
cout << "byte_value: " << byte_value << endl; //byte_value:
static_cast<int> ( byte_value );
cout << "byte_value: " << byte_value << endl; //byte_value: 0
C++的limits文件提供了内置类型有关的信息,告诉我们它们的取值范围。
浮点数类型在运算是还有精度的问题【受底层数据类型的固有精度影响】:我们使用浮点数会带有小数点,当我们从十进制转换成二进制储存这个数字的时候,由于二进制储存的长度有限,小数部分不能用二进制精确的还原,会存在一定的误差。
3、等于、关系和逻辑操作符
| 操作符 | 功能 | 用法 |
| ! | 逻辑非 | !a |
| < | 小于 | a<b |
| <= | 小于等于 | a<=b |
| > | 大于 | a>b |
| >= | 大于等于 | a>=b |
| == | 等于 | a==b |
| != | 不等于 | a!=b |
| && | 逻辑与 | a&&b |
| || | 逻辑或 | a||b |
这些操作符的结果都是bool类型,返回true或false。
二元运算符潜在的缺点:
1、二元操作符左右运算顺序是未定义的,所以我们在对二元关系符进行操作时,最好是顺序无关的:
if ( ia[ index++ ] < ia[ index ] )
//如果先运算左边,那么左边是ia[0],然后index++,然后右边是ia[1]
//如果先运算右边,那边右边是ia[1],然后左边是ia[0],然后index++
2、如果连续使用的话,可能会出现不对的情况。
本文介绍了C++中的表达式概念,包括一元和二元操作符的使用,算术操作符的功能及异常情况,以及等于、关系和逻辑操作符的特性。还讨论了类型转换、精度问题以及操作符的优先级和结合性的重要性。
514





