C语言里的算数用算符
+ 加法运算符
- 减法运算符,或负值运算符
* 乘法运算符
/ 除法运算符
% 模运算符,或称取余运算符,要求%两侧均为整型数据
运算顺序
1> 算术表达式
用算术运算符将数据连接起来的式子,称为“算术表达式”。比如a + b、10 * 5等。如果表达式比较复杂的话,那么就要注意一下它的运算顺序。表达式的运算顺序是按照运算符的结合方向和优先级进行的。
2> 结合方向
算术运算符的结合方向是从左到右。例如表达式2+3+4,先计算2+3。
3> 优先级
优先级越高,就越先结合,此时并没有参与运算仅仅是操作符与操作数结合到了一起:
负值运算符(-) > 乘(*)、除(/)、模(%)运算符 > 加(+)、减(-)运算符
4> 小括号
如果需要先计算优先级低的可以使用小括号()括住,小括号的优先级是最高的!
例如4+5*8-2默认的计算顺序是:*、+、-
如果想先执行加法运算,就可以这样写:(4+5)*8-2,最后的结果都是不一样的\
5>计算顺序
多个操作符相互混合运算的话,优先级高的操作符与其操作数先结合到了一起,成为一个整体,
但是其并没有计算,计算时要看最外层的运算符是什么,它会按照最外层操作符的结合方向进行计算,
然后是剥洋葱式一层一层的计算
例如表达式2*4+5*8/-2的计算顺序为:首先 - 与 2 结合 ,然后2 * 4 结合, 5 * 8结合
然后是(5 * 8)/ -2 结合,结合后的结果为 (2 * 4) + ((5 * 8)/(-2)),此时最外层为 +
加法运行先计算左边的操作数,那么 2 * 4 先进行计算 结果为 8 + ((5 * 8)/(-2)) ,然后计算+右边的操作数 ((5 * 8)/(-2))
它的最外层是 / , 那么先计算操作符左边的数 5 * 8 计算后结果为 40 / (-2) , 然后计算40 /(-2)结果为-20
现在计算表达式为 8 + (-20) 最终的结果为 -16
算术运算的注意点
1.自动类型转换
int a = 10.6;
int b = 10.5 + 1.7;
2.自动将大类型转换为了小类型,会丢失精度
自动类型提升
int b = 10.5 + 10;
3.将右边的10提升为了double类型
double b = 1.0 / 2;
解决除法的精度问题
4.强制类型转换
double a = (double)1 / 2;
double b = (double)(1 / 2);
自动类型提升
相同数据类型的值才能进行运算(比如加法运算),而且运算结果依然是同一种数据类型。系统会自动对占用内存较少的类型做一个“自动类型提升”的操作
常见的自动类型提升
float a = 10 + 3.45f;// int 提升为 float
int b = 'A' + 32; // char 提升为 int
double c = 10.3f + 5.7; // float 提升为 double
来源:oschina
链接:https://my.oschina.net/u/2668611/blog/636717