一、C中运算符的优先级以及结合方向
优先级 |
运算符种类 |
运算符 |
1 |
|
[]数组下标,()圆括号,。对象成员选择,->指针对象选择 |
2 |
单目运算符(右结合性) |
—负号运算符,++,--,*取值(*指针变量) &取地址,!(逻辑非),~(按位取反) |
强制类型转换(右结合性) |
(类型) | |
求字节大小(右结合性) |
sizeof | |
3 |
算术运算符 |
*,/,% 高于 + ,— |
4 |
移位运算符 |
<<,>> |
5 |
关系运算符 |
>,>=,<,<= 高于==,!= |
6 |
位运算符 |
& 高于 ^ 高于| |
7 |
逻辑运算符 |
&& 高于 || |
8 |
条件运算符(右结合性) |
?: |
9 |
赋值运算符(右结合性) |
=,/=,*=,%=,+=,-=,<<=,>>=,&=,^=,|= |
10 |
逗号运算符 |
, |
二、常用运算符的注意事项
1。逻辑运算符 && ||
表达式1&&表达式2 一般先计算表达式1的值,再计算表达式2的值,如果表达式1和表达式2都为真,这个逻辑表达式才为真。
为了优化,如果表达式1的值为假时,那么不必计算表达式2值,可直接得出此逻辑表达式的值为假。
同理:表达式1 || 表达式2 如果表达式1的值为真时,那么不必计算表达式2值,可直接得出此逻辑表达式的值为真。
示例:
#include<stdio.h>
#include<string.h>
int i=1;
int main(void)
{
int i=0,j=1,a=0;
if(i&&j)
a++;
printf("%d\n",a);
if(j||i)
a++;
printf("%d\n",a);
}
结果: