逗号运算符
逗号运算符优先级最低;
逗号运算符是用来分割多个表达式的;
由逗号运算符组成的逗号表达式的运算结果是:最后一个表达式的结果
注意:
int i;
i = 3,4,5,;
以上语句得到的i的值为3
i = (3, 4, 5);
得到的i的值为5
总结:
++i置前自增:先对i的值加1,然后用增1后的值参加所有的后续运算
i++滞后自增自减:先用变量原来的值参加所有的后续运算,直到本条语句所有的运算全部运算完毕后,才对变量值加减1
滞后自增减在条表中的特殊表现:先利用原值参与条件判断,然后立刻自增减;
滞后自增减在逗号表达式中的特殊表现:
int i = 3, j = 4, k;
k = (++i, j++, i++ * ++j);
printf("%d %d %d\n", i, j, k);
结果:
i = 5;
j = 6
k = 24
总结:
滞后自增遇到逗号运算符时立刻自增减,但是函数中的参数逗号除外
数据类型转换
1.1)自动类型转换
在某一次运算中,如果参与运算的两个运算数的数据类型不一致,则C语言会对其自定进行数据类型转换,且遵循如下原则:
短整型向长整型靠拢;
简单数据类型向复杂数据类型靠拢;
如下两个例子:
5.0 + 1/2
=5.0 +0
=5.0+0.0=5.0
5+1/2.0=5+1.0/2.0=5+0.5=5.0+0.5=5.5
数学运算式:1/1+1/2+1/3+.....+1/n
int i;
double s = 0;
for(i = 1; i <= n; i++)
s += 1.0/i;
1.2.强制类型转换
语法:
(数据类型转化)表达式
s += (double)1 / i;//强制类型转换也是运算符,是单目运算符最低的
强制类型转换以人类的意志为原则
s +=(double)(1/i);//只是得到0.0
强制类型转换运算绝对不可能改变变量的数据类型
1.3自动强制类型转换
这种运算只发生在赋值运算中
char c = 97.14159;
在赋值时候会丢失一些精度,输出小写字母a
double f = ‘A‘;
输出65.000
转换原则:若赋值运算符两侧的数据类型不一致,则,由C语言对赋值运算符右侧表达式时的值,进行自动类型转换工作;且是按照赋值运算符左侧的左值数据类型为依据转换的;
逗号表达式与自增自减运算符和类型转换的规则