C语言中的优先级很重要,详细分的话,有15级
在运算中,需要
第一级
[] 数组下标 数组名[下标常量]
() 圆括号 (表达式)函数名 (形参量)
. 成员变量(对象) 对象.成员
-> 成员选择 (指针) 对象指针->成员名
这里参考这个大佬整理的 偷懒
这里我也梳理一下
运算符
初等运算符 取值
() 优先计算括号内部
[] 数组的下标取值运算符
. 结构体内部访问成员运算符 结构体变量直接访问
-> 结构体外部访问成员运算符 通过结构体所在地址访问内部成员
单目运算符 只有一个操作数
! 逻辑非 !0 1真 !1 0假 !2 0假
~ 按位取反(二进制)
char a=3; 0000 0011 有符号
~a == 1111 1100 // -127+3 -124
++ 自增运算符 (需要改变自己的值,有赋值运算)
-- 自减运算符
++--前置和++--后置运算符的区别 (对自己赋值)
++--前置,单目运算符正常写法,正常运算
++--后置,优先级改变为最低,本条指令全部执行完成后,再进行++--
++1 不成立 1是常量
int n = 0;
++n; // n+1 n=n+1
n++; // n n=n+1 最后运行
- 负号运算符 无符号变量使用负号?
int n = 5;
-n == -5
unsigned int n = 5;
-n == -5 参与运算等价 参与赋值时需要考虑数据类型
n=-n; -5 参加到 n 强制赋值 n=-5
类型转换()
自动转换 运算过程中数据类型自动向高精度转换
int a=2;
float b=3.14;
int c=a+b; 5
float d=a+d; 5.140000
强制转换 把数据进行指定类型的输出 使用类型转换符进行强制转换
int n=5
(char)n n还是int 只是拿来运算 用char去读
float a=3.14
int x=(int)a == 3
整形->单精度->双精度
* 解指针 取指针保存的地址的值
int n = 5
int *p =& n;
*p == 5
& 取地址 取空间的地址(把整个空间看做一个整体,空间的首地址作为空间地址)
%p 以十六进制输出
sizeof 长度运算符,计算所占的空间字节大小 关键字也是运算符
sizeof 和 strlen()
sizeof 是关键字也是运算符 测量空间大小
strlen() 函数 测量有效字符串
算术运算符
* 乘法
/ 除法 两边数据都是整数,则为取整运算,有一个为小数,则运算除法
% 求余 必须为整数,除数的符号是余数的符号
+ 加法
- 减法
位移运算符
<< 左移动
int n = 5 0000 0101
int m = 0
m = n <<3; 0010 1000
>> 右移动
关系运算符号
>
>=
<
<=
==
!=
逻辑运算符 优先级顺序颠倒
& 按位与 遇0为0 其他为1
1101 & 0011 == 0001 乘法运算
^ 按位异与 相同为0,不同位1
1101 ^ 0011 == 1110
| 按位或 遇1为1 其他为0
1101 | 0011 == 1111
&& 逻辑与 前面为假,则不运算后面
int n = 5
1>2&&++n; n不变n=5
2>1&&++n; 输出1 ++n 非0为真
|| 逻辑或 前面为真,则不运算后面
int n = 5
2>1||++n; n不变n=5
条件运算符
?: 三目运算符判断问号前面是判断条件 冒号前面为真语句 后面是假语句
a>b? c:d a>b=1 执行c a>b=0 执行d
int n=1 m=2
int x1
x1=1>2?n--:m++ x1=2 n=1 m=3
赋值运算符
=
+=
-=
*=
/=
%=
<<=
>>=
&=
^=
|=
计算的同时把值赋给自身
int n = 5
n+1;//n=5;
n++; //n=6; ++n; n=6
n=n+1; n=6
n+=1 n=6
逗号运算符
,分隔作用 从左到右
int n=1,m=2,q=3,w;
w=(n=5,q=n+m,q--);
printf("w%d ",w);
首先运算的n=5 q=n+m=7 将7赋值给w q-- 为6
输出为 7