2.6赋值表达式和类型转换 261赋值表达式 含有赋值运算符的表达式叫做赋值表达式。其一般形式为 variable expression 可以看出,在赋值表达式中,赋值运算符的左操作数必须是 个变量,而右操作数可以是任一合法的表达式。赋值表达 式的值就是其右操作数的值。 由于赋值运算符要求其右操作数为一个表达式,而赋值表达 式是一个合法的表达式,所以可以将赋值表达式用做赋值运 算符的右操作数,从而构成所谓的“串连”赋值表达式。如: j=3*5
2.6 赋值表达式和类型转换 2.6.1 赋值表达式 含有赋值运算符的表达式叫做赋值表达式。其一般形式为: variable = expression 可以看出,在赋值表达式中,赋值运算符的左操作数必须是 一个变量,而右操作数可以是任一合法的表达式。赋值表达 式的值就是其右操作数的值。 由于赋值运算符要求其右操作数为一个表达式,而赋值表达 式是一个合法的表达式,所以可以将赋值表达式用做赋值运 算符的右操作数,从而构成所谓的“串连”赋值表达式。如: i = j = 3 * 5
2.6.2增量减量运算符 增量和减量运算符都是隐含有赋值操作的运算符,它们将其 操作数(必须是it或char型变量)的值加1或减1。这两 个运算符虽然都是一元运算符,但由于操作数即可以放在运 算符的左边(后置),又可以放在运算符的右边(前置), 从而使得它们对其他运算产生不同的影响。设i是一个int型 变量,则增量和减量运算符将有以下4种使用形式: 十 ∥前置增量 ∥前置减量 1+ ∥后置增量 ∥后置减量
2.6.2 增量减量运算符 ++ -- 增量和减量运算符都是隐含有赋值操作的运算符,它们将其 操作数(必须是 int 或 char 型变量)的值加 1 或减 1。这两 个运算符虽然都是一元运算符,但由于操作数即可以放在运 算符的左边(后置),又可以放在运算符的右边(前置), 从而使得它们对其他运算产生不同的影响。设 i 是一个 int 型 变量,则增量和减量运算符将有以下 4 种使用形式: ++ i // 前置增量 -- i // 前置减量 i ++ // 后置增量 i -- // 后置减量
对于单个增减量表达式所构成的语句来说,前置和后置的运算 结果是没有什么区别的。而对于还包含有其他运算的表达式来 讲,前置和后置的运算结果将会产生不同的效果。 例 3 j=i+;/j的值为3,i的值为4 k=++i;∥k的值为5,i的值为5 注意:由于不同的编译器对增减量运算符处理的不同,所以类 似以下的用法将存在移植性问题。 cout <<i ++< 't' <<i++<< endl
对于单个增减量表达式所构成的语句来说,前置和后置的运算 结果是没有什么区别的。而对于还包含有其他运算的表达式来 讲,前置和后置的运算结果将会产生不同的效果。 例: //… i = 3; j = i ++; // j 的值为 3,i 的值为 4 k = ++ i; // k 的值为 5,i 的值为 5 注意:由于不同的编译器对增减量运算符处理的不同,所以类 似以下的用法将存在移植性问题。 cout << i ++ << '\t' << i ++ << endl;
2.6.3复合赋值运算符 / = < >> 复合赋值运算符均是二元运算符,它们的运算过程为:先将运 算符左右操作数的值进行运算符所规定的算术或位运算,然后 将运算的结果赋给左操作数 例 +=2;∥等效于:i++;i++ 1*=i+j;∥等效于:t=i+j;i=i*t
2.6.3 复合赋值运算符 += -= *= /= %= &= |= ^= <<= >>= 复合赋值运算符均是二元运算符,它们的运算过程为:先将运 算符左右操作数的值进行运算符所规定的算术或位运算,然后 将运算的结果赋给左操作数。 例: i += 2; // 等效于:i ++; i ++ i *= i + j; // 等效于:t = i + j; i = i * t;
2.64表达式中的类型转换 C++语言支持不同数据类型的混合运算。当一个表达式中存 在不同类型的数据时,编译器会自动地对数据进行转换,以 使所有参加运算的数据之类型趋于相同,从而保证运算的精 度。自动转换的一般原则是短数据被转换成长数据。 例 应当说明的是,类型转换都是临时性 f=i+j*0.5 的,转换并不改变变量的数据类型, 仅改变变量的值。因此,使用不当有 double 可能导致数据精度的丧失。例如:设 ,j是int型变量,j的值为3,则 1=j*0.3 double 后,i的值为0
2.6.4 表达式中的类型转换 C++ 语言支持不同数据类型的混合运算。当一个表达式中存 在不同类型的数据时,编译器会自动地对数据进行转换,以 使所有参加运算的数据之类型趋于相同,从而保证运算的精 度。自动转换的一般原则是短数据被转换成长数据。 例: f = i + j * 0.5 double double 应当说明的是,类型转换都是临时性 的,转换并不改变变量的数据类型, 仅改变变量的值。因此,使用不当有 可能导致数据精度的丧失。例如:设 i,j 是 int 型变量,j 的值为 3,则: i = j * 0.3 后,i 的值为 0