1.说明:自动类型转换:参与运算的各个数据都转换成数据较长的类型,结果也为数据类型较长的类型。
2.三原则:就高不就低,就长不就短,就左不就右。
3.图示:横向必定自转,纵向需要强转
4.口诀:低转高自转,高转低强转。
5.例题:
设int x=2,y=4;,值不是0的表达式是 ? A 1/xy B 1/(xy) C 1.0/x/y D 1/x/(double)y
- 分析:A:1/x=0(都是int类型)→0y=04=0
- B:(xy)=24=8→1/8=0
- C:1.0/x=0.5(1.0默认为double类型)→0.5/4=0.125
- D:1/x/=1/2=0→0/(double)y=强制转型0.0/4.0=0.0
6.例题:若定义了int a;char b; float c;,则表达式a*b-c的类型是?
- 分析:根据优先级先算a*b→char类型会自动转成int类型
- 接着char-float c→float类型会自动转成double类型
7.例题:设int i;float f;double d;char c;
则表达式i*f-d+c值的类型是?
- 分析:根据优先级先算if=intfloat→float类型会自动转成double类型
- double-double d+char c=double(选取变量中数据中最长的类型作为结果类型)
8.例题:设int i;float f;double d;long e;
则表达式10+'a'+f*i-d/e值的类型是?
- 分析:根据优先级先算fi=floatint=float
- 接着d/e=double d/long e=double
- 然后10+'a'+float-double=int+float-double=double
9.例题:♥设int A=9,B=6,C;,执行语句C=A/B+0.8;后C 的值是?
- 两种分析情况:
-
- 语句不加括号
int a = 1, b = 2;
printf("表达式结果=%d\n", a = b + 2, a++, a + b);
//表达式不加括号等于4,计算的是a = b + 2的值,没执行后边的
printf("a=%d,b=%d\n", a, b);//a=4,b=2
- -语句加括号
int a = 1, b = 2;
printf("表达式结果=%d\n", (a = b + 2, a++, a + b));
//加括号等于将表达式看成逗号表达式,结果为末尾值=7
printf("a=%d,b=%d\n", a, b);//a=5,b=2