得程序设设 感减 20023
C语言程序设计 2002 年 第二章 基本数据类型和运算
23.7赋值运算 赋值运算符(11个) 简单赋值运算符:= 复合赋值运算符:+= =/=9= &=F 优先级:仅高于逗号运算符 赋值表达式的形式: 1=e2 或 el op=e2 操作数:e1必须为左值表达式。e1和e2可为不同的基本类型。 例: a=c+d S|3=10 而a*b=c是错误的
2.3.7 赋值运算 赋值运算符( 11个): ▪ 简单赋值运算符: = ▪ 复合赋值运算符: += -= *= /= %= &= |= ^= <<= >>= 优先级: 仅高于逗号运算符. 赋值表达式的形式: e1=e2 或 e1 op=e2 操作数: e1必须为左值表达式。 e1和e2可为不同的基本类型。 例: a=c+d s[3]=10 而 a*b=c 是错误的
类型转换: 计算e2时遵循一般表达式的规则。 计算e1时不执行任何类型转换。(不需要整数提升) 赋值时候将e2结果类型转换为e1的类型(赋值转换) 运算结果:赋值后的e的值和类型。 简单赋值运算符: 例 Int x; char ch; short cl c2 x=100值为100,类型为int(无类型转换) x=123.6值为123,类型为int( doubles int) x a 值为97,类型为int(整数提升 chari int) x=a3<“b’值为1,类型为int(整数提升、无赋值转换)
类型转换: ▪ 计算e2时遵循一般表达式的规则。 ▪ 计算e1时不执行任何类型转换。(不需要整数提升) ▪ 赋值时候将e2结果类型转换为e1的类型(赋值转换)。 运算结果:赋值后的e1的值和类型。 简单赋值运算符: 例: int x; char ch; short c1,c2; x=100 值为100,类型为int (无类型转换) x=123.6 值为123,类型为int (double➔ int) x=‘a’ 值为97,类型为int (整数提升char➔ int) x=‘a’<‘b’ 值为1, 类型为int (整数提升、无赋值转换)
ch=100值为100,类型为char( int-char) printf(“%od”,ch=128);的输出为-128 c⊥=X 值由x决定,类型为 short(int→ short) cl=c2=1值为1,类型为 short( int=short) 表达式的值 2 cI 2 C2
ch=100 值为100,类型为char (int➔char) printf(“%d”,ch=128); 的输出为-128 c1=x 值由x决定,类型为short (int➔short) c1=c2=1 值为1,类型为short (int➔short) c1 ? c2 ? 表达式的值 1 c1 ? c2 1 c1 1 c2 1 ① ②
复合赋值运算符: int i i+=1;与i=i计1(及++i等价,与计+不等价; i<<与i≤j等价; i/=j+2与i=i(+2)等价; i%=*2与i=i%(j2)等价; 注意:复合赋值表达式与其展开式不一定等价: int 1=0; int s 10; S[0J=10: S[i++]+=1;与si+=si++]+1不等价;
复合赋值运算符: int i,j; i+=1; 与 i=i+1(及++ i)等价,与 i++不等价; i<<=j 与 i=i<<j 等价; i/=j+2 与 i= i/(j+2) 等价; i%=j*2 与 i= i%(j*2) 等价; 注意:复合赋值表达式与其展开式不一定等价: int i=0; int s[10]; s[0]=10; s[i++]+=1; 与 s[i++]= s[i++] +1 不等价;