.1,
优先级 |
运算符 |
结合律 |
1 |
后缀运算符:[] () · -> ++ --(类型名称){列表} |
从左到右 |
2 |
一元运算符:++ -- ! ~ + - * & sizeof_Alignof |
从右到左 |
3 |
类型转换运算符:(类型名称) |
从右到左 |
4 |
乘除法运算符:* / % |
从左到右 |
5 |
加减法运算符:+ - |
从左到右 |
6 |
移位运算符:<< >> |
从左到右 |
7 |
关系运算符:<<= >>= |
从左到右 |
8 |
相等运算符:== != |
从左到右 |
9 |
位运算符 AND:& |
从左到右 |
10 |
位运算符 XOR:^ |
从左到右 |
11 |
位运算符 OR:| |
从左到右 |
12 |
逻辑运算符 AND:&& |
从左到右 |
13 |
逻辑运算符 OR:|| |
从左到右 |
14 |
条件运算符:?: |
从右到左 |
15 |
赋值运算符: = += -= *= /= %= &= ^= |= <<= >>= |
从右到左 |
16 |
逗号运算符:, |
从左到右
|
表5.1 运算符优先级规定表
哇塞,运算符那么多,还有的没用过呢?记不住啊,我太难了,好累啊!
没办法,这些都得记住,但不是现在马上全部记住,用着用着就能够记住的,相信我,先把这份表收藏,用的时候拿出来看,要死记硬背也行,看个人习惯怎么记忆了。
请记住,C语言运算符遵循一个原则,优先级最高先运算,同级别的从左往右运算。
比如,一个表达式 (x1+x2*x3)/(x4-x5+x6-x7)中,
括号等级最高,所以先运算括号运算符,有两个括号运算符,所以这是同级别运算,先运算左边的括号,在左边的括号中(x1+x2*x3),有加法有乘法,先执行高等级的乘法,然后再执行加法。然后执行右边的括号运算里面的表达式(x4-x5+x6-x7),有加法有减法,是同级别的运算,所以先运算左边的减法再依次运算加法和减法,最终把两边运算的值进行除法计算即可。
5.2.3 表达式练习题之求平均数
要求:输入三个整数,求它们的平均值。简单吧,代码如下:
#include <stdio.h>
void main()
{
int x1, x2, x3;
int y;
printf("please input three data: \n");
scanf("%d, %d, %d", &x1, &x2, &x3);
getchar();
y = (x1 + x2 + x3)/3;
printf("average y = %d\n", y);
}
编译执行后,输入2,4,6得到结果:average y = 4。
但是如果输入3,5,6得到的结果居然也是:average y = 4。打开计算器,计算出平均值为3.666666......
这是由于计算机计算精度不同导致的,由于整型int只能精确到小数点左边,也就是int取值范围在-2,147,483,648 到 2,147,483,647,所以为了精度高一些,可以用上float类型,它的取值范围是1.2E-38 到 3.4E+38。
改进后,代码如下:
#include <stdio.h>
void main()
{
float x1, x2, x3;
float y;
printf("please input three data: \n");
scanf("%f, %f, %f", &x1, &x2, &x3);
getchar();
y = (x1 + x2 + x3)/3;
printf("average y = %f\n", y);
}
这时候,再输入3,5,6得到的结果就是:average y = 4.666667。
修改的部分有,1. 声明的类型由int改为float。
2. scanf中,%d改为%f。
3. printf中,%d改为%f。
有了这些修改就能够支持精度高的浮点型float数据运算了。
5.2.4 表达式练习题之求个位数和万位数的和
出这个题纯粹练习思维,题:输入一个5位数的整型,求个位数和万位数的和。
希望读者自行编写完程序后,再看参考代码。
大体思路:通过scanf输入一个5位数,比如输入的是32145,取个位5,取万位数3,求和。
具体思路:
1. 定义一个变量用来存放上面所说的32145,定义一个变量用来存放个位数,定义一个变量用来存放万位数,定义一个变量用来存放个位和万位的和,总共需要定义四个变量。
2. 求个位数,需要用到取余表达式,即32145%10。打开草稿纸,如图5.10所示,计算32145除以10的余数为5,刚好就是获得的个位数,
图5.10 计算32145%10的结果
3. 求万位数,只需要用到除法表达式,即32145/10000,要打开草稿纸算也行,笔者就不发图了。
4. 计算个位数和万位数的和。代码如下:
#include <stdio.h>
void main()
{
int data;
int first, fifth;
int getAddWorth;
printf("please input a 5 digit data\n");
scanf("%d", &data);
getchar();
first = data % 10;
fifth = data / 10000;
getAddWorth = first + fifth;
printf("data = %d, first = %d, fifth = %d, getAddWorth = %d \n", data, first, fifth, getAddWorth);
}
执行后,输入32145可得getAddWorth的值为8,正解!
注意:变量命名也可以由大写字母和小