一.算数运算符
算数运算符的分类:
对于 “ / ”
(1).如果是两个整型数相除,此时相当于是整除的效果
(2).除法运算中 除数不能为 0
对于 “ % ”
(1).除数不能为0
(2).求余运算,运算数不能是小数。必须是整数
(3).结果的符号 ,取决于 左操作数 的符号
对于 “ ++ ” 自增 --- 表示一次增加1 (“ -- ”用法相似)
int a = 1;
a++ //后置加加 --- 先用(表达式的结果) 后加(让i自增)
++a //前置加加 --- 先加(让i自增) 后用(表达式的结果)
二.赋值运算
1.优先级和结合性
优先级 --- 不同优先级的运算 混合运算时,高优先级的先结合
结合性 --- 同一优先级的运算 混合运算时,按照结合性进行结合。
如a=c-d*e/f 有三个运算符 “ - ” ,“ * ”,“ / ”因为“ * ”与“ / ”优先级高于“ - ”所以先算d*e/f,又因为“ * ”与“ / ”优先级相同,则按照结合方向从左至右。
2. 隐式类型转换与强制类型转
隐式类型转换
在多种类型的数据进行运算时,输出值只能有一个数据类型。
如
int a = 8;
printf("%f", a * 1.2);;
如果输出则会发现输出变为了double类型的值9.2(即便一开始声明是int类型),因为默认1.0为double类型,低精度向高精度转换,故得到的是一个double类型。详细看下图
其中进行运算时向左的箭头是必定转化的。如char数据必定会转换成int类型。
注意:
当unsigned short 向int转换时
如0x18 12;变为int类型则为0x18 12
而当signed short向int转换时
如0x18 12;变为int类型为0x1812
而负数0xf8 12;变为int类型为0xff ff f8 12
强制类型转换
还是上述例子
int a = 8;
printf("%f", a * 1.2);
我们将其改为
int a = 8;
printf("%d",(int)( a * 1.2));
(int)表示强制转换为int类型输出的值就会强行变为整型即9而非9.2。
总结
高精度 => 低精度 --- 精度丢失
长类型 => 短类型 --- 高位截断
短类型 => 长类型 --- 短类型是否有符号
无符号 --- 补0
有符号 --- 符号位扩展
三 “ ,”号运算
逗号运算(顺序求值运算符):
“ , ” 优先级最低
语法:
表达式1,表达式2,表达式3, ...,表达式n
逗号运算的过程:
a=(1+2,a++,3+4) //从左到右,挨个运算
//逗号运算表达式的结果 --- 是整个式子中最后一个表达式运算的结果
上式a = 7。
说明:文章图片取自C语言程序设计(第三版)---谭浩强