复合赋值运算符
复合赋值运算符都是双目运算符,相当于一个简单赋值运算符和其他运算符的组合。C++中提供了很多复合赋值运算符。
复合赋值运算不但书写形式简洁、紧凑,运算也非常高效,编译器在生成目标代码时能够直接进行优化。
复合赋值运算符可将中间的运算结果返回,作为表达式的值。
例如,下述代码中,a*=5等价于a=a5,a5的运算结果30作为临时变量赋给了变量a。
int a=6;
a*=5;
sizeof运算符
sizeof运算符用于计算指定数据类型或表达式结果在内存中占用的字节数,有以下两种语法形式:
- sizeof(类型说明符)
- sizeof(表达式)
sizeof运算符是一个看起来非常像函数的运算符,下面来看几个示例。
sizeof(char) //返回1,说明char类型占用1个字节
sizeof(void*) //返回4,说明空指针占用4个字节
sizeof(66) //返回4,说明整数66占用4个字节
注意:由于CPU寄存器的位数不同,不同计算机上同种数据类型占用的内存字节数目可能不同
运算符的优先级和结合性
- 运算符的优先级决定了表达式中各项运算执行的先后顺序。
- 高优先级的运算符要先于低优先级的运算符进行运算。例如,表达式a+bc中,先计算bc,得到结果再与a相加,这说明“*”运算符的优先级高于“+”运算符。
- 当表达式中出现括号时,会改变运算的先后顺序,如表达式(a+b)*c中,先计算括号中的表达式,再计算括号外的表达式,这说明“( )”运算符的优先级是最高的。
运算符的结合方式有两种:
- 自左向右结合(→)
- 自右向左结合(←)。
- 自左向右结合表示运算符优先与其左边的表达式结合,如加法、减法、乘法、除法运算等;
- 自右向左结合表示运算符优先与其右边的表达式结合,如自增、自减、复合赋值运算等。 同一优先级的运算符,运算顺序由结合方向决定
- 例如,表达式12/3中,“”和“/”的优先级别相同,其结合方向自左向右,因此该表达式等价于(1*2)/3。
C++中,各运算符的优先级和结合性如下图