优先级 | 运算符 | 结合方式 | 类型 |
---|---|---|---|
1 | () [] . -> | 自左向右 | 初等运算符 |
2 | ! ~ - ++ -- (类型) *(解引用) & sizeof | 自右向左 | 单目运算符 |
3 | *(乘) / % | 自左向右 | 算术运算符 |
4 | + - | 自左向右 | 算术运算符 |
5 | >> << | 自左向右 | 移位运算符 |
6 | > < >= <= | 自左向右 | 关系运算符 |
7 | == != | 自左向右 | 关系运算符 |
8 | & | 自左向右 | 位运算符 |
9 | ^ | 自左向右 | 位运算符 |
10 | l按位或 | 自左向右 | 位运算符 |
11 | && | 自左向右 | 逻辑运算符 |
12 | ll逻辑或 | 自左向右 | 逻辑运算符 |
13 | ? : | 自左向右 | 条件运算符 |
14 | = 、符合赋值运算符 | 自左向右 | 赋值运算符 |
15 | , (逗号) | 自左向右 | 逗号运算符 |
2.
/(除):两个操作数都为整型时结果也为整型,有一个操作数为浮点数(不论是除数
还是被除数)则结果也为浮点型
%(取余):两个操作数都必须为整型,去商取余
>>(右移):①算术右移:右边丢弃,左边补原符号位,整数补0,负数补1
②逻辑右移:右边丢弃,左边补0
<<(左移):低位补0
^(按位异或):二进制位相同取0,不同取1
sizeof:求字节个数,如32位机器的地址字节个数为4,64位的为8,char1,int4
3.
short s = 0; //short s = 5;
int a = 10;
printf("%d\n", sizeof(s=a+5)); //输出2,short类型的字节数为2
printf("%d\n", s); //输出结果为0,如果s = 5;则输出结果为5
//原因:sizeof中的表达式不运算,所以s=a+5中赋值时并没有发生截断,s就是初始值
4.exp1?exp2 :exp3;(条件运算符):如果exp1(表示式1)为真则计算exp2的值,否则计算exp3 的值
if(a>b) //求两个数中较大的数
return a;
else
return b; //等价于 a>b?a:b
原文:https://blog.51cto.com/14829443/2534406