在c语言的学习中c的操作符是最重要的一关,下面是我对操作符的总结:
算数操作符:
+ 加:左右操作数适用于整型和浮点型数。
- 减:左右操作数适用于整型和浮点型数。
* 乘:左右操作数适用于整型和浮点型数。
/ 除:左右操作数适用于整型和浮点型数。
% 模运算或求余:左右两边接受两个整型操作数,返回值是余数而不是商。
eg:
<pre class="c" name="code">
int a=10,b=7;
printf("%d %d %d %d %d",a+b,a-b,a*b,a/b,a%b);
</pre>
移位操作符:
<< 左移操作符 左边溢出的移除,右边空出的位用0补上;
>> 右移操作符 左边空出的位有两种方式补充:
逻辑移位 在左边空出的用0补充。
算数移位 在左边空出的用符号位原本(符号位原本的为1就用1 补充 符号位原本就是0就用0 补充)补充。
补充:
1、右移一个数等价于给一个数除2。 -----------> a>>1 <==> a/2。
2、左移一个数等价于给一个数乘2。 -----------> a<<1 <==> a*2。
算数操作符:
+ 加:左右操作数适用于整型和浮点型数。
- 减:左右操作数适用于整型和浮点型数。
* 乘:左右操作数适用于整型和浮点型数。
/ 除:左右操作数适用于整型和浮点型数。
% 模运算或求余:左右两边接受两个整型操作数,返回值是余数而不是商。
eg:
<pre class="c" name="code">
int a=10,b=7;
printf("%d %d %d %d %d",a+b,a-b,a*b,a/b,a%b);
</pre>
移位操作符:
<< 左移操作符 左边溢出的移除,右边空出的位用0补上;
>> 右移操作符 左边空出的位有两种方式补充:
逻辑移位 在左边空出的用0补充。
算数移位 在左边空出的用符号位原本(符号位原本的为1就用1 补充 符号位原本就是0就用0 补充)补充。
补充:
1、右移一个数等价于给一个数除2。 -----------> a>>1 <==> a/2。
2、左移一个数等价于给一个数乘2。 -----------> a<<1 <==> a*2。
eg:
<pre class="c" name="code">
int a=10;
printf("%d %d",a>>1,a<<1);
</pre>
位操作符:
& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0。
| 按位或 如果两个相应的二进制位都为0,则该位的结果值为0,否则为1。
^ 按位异或 如果两个想应的二进制位相同, 则该位的结果值为0,不同为1。
eg:
不引入变量进行两个数的交换:
a=a^b;
b=a^b;
a=a^b;
赋值操作符:
+=
-=
*=
/=
%=
<<=
>>=
&=
^=
|=
eg:
a=a+10; <==> a+=10;
<pre class="c" name="code">
int a=10;
printf("%d %d",a>>1,a<<1);
</pre>
位操作符:
& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0。
| 按位或 如果两个相应的二进制位都为0,则该位的结果值为0,否则为1。
^ 按位异或 如果两个想应的二进制位相同, 则该位的结果值为0,不同为1。
eg:
不引入变量进行两个数的交换:
a=a^b;
b=a^b;
a=a^b;
赋值操作符:
+=
-=
*=
/=
%=
<<=
>>=
&=
^=
|=
eg:
a=a+10; <==> a+=10;
单目操作符:
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
-- 前置、 后置--
++ 前置、 后置++
* 间接访问操作符
(类型) 强制类型转换
eg:
<pre class="c" name="code">
int a=10;
int* p=&a;
*p=20;
</pre>
关系操作符
>
<
<=
>=
!=
==
注:
=与==的用法及注意事项,=为赋值,==为等于。
逻辑操作符:
&& 逻辑与
|| 逻辑或
eg:
非0为真 0为假
1&2 ————> 0
真&&真————>1
真&&假————>0
假&&假————>0
1|2 ————> 3
真&&真————>1
真&&假————>1
假&&假————>0
条件操作符
形式:
exp1 ? exp2 : exp3
eg:
当a大于5时b=10,否则b=20
<pre class="c" name="code">
b=a>5 ? 10 : 20;
</pre>
逗号表达式
exp1,exp2,exp3,exp4;
逗号表达式是用逗号隔开的多个表达式,
从左向向右依次执行,整个表达式的结果是最后一个表达式的结果。
eg:
for(a=10,b=20,i=1;i<10;i++,a++)
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
-- 前置、 后置--
++ 前置、 后置++
* 间接访问操作符
(类型) 强制类型转换
eg:
<pre class="c" name="code">
int a=10;
int* p=&a;
*p=20;
</pre>
关系操作符
>
<
<=
>=
!=
==
注:
=与==的用法及注意事项,=为赋值,==为等于。
逻辑操作符:
&& 逻辑与
|| 逻辑或
eg:
非0为真 0为假
1&2 ————> 0
真&&真————>1
真&&假————>0
假&&假————>0
1|2 ————> 3
真&&真————>1
真&&假————>1
假&&假————>0
条件操作符
形式:
exp1 ? exp2 : exp3
eg:
当a大于5时b=10,否则b=20
<pre class="c" name="code">
b=a>5 ? 10 : 20;
</pre>
逗号表达式
exp1,exp2,exp3,exp4;
逗号表达式是用逗号隔开的多个表达式,
从左向向右依次执行,整个表达式的结果是最后一个表达式的结果。
eg:
for(a=10,b=20,i=1;i<10;i++,a++)
优先级顺序
基本表达式 1级
后缀表达式 2级
单目/一元运算 3级
强制类型表达式 4级
乘法表达式 5级
加法运算符 6级
移位运算符 7级
关系运算符 8级
相等运算符 9级
位与运算符 10级
位异或运算符 11级
位或运算符 12 级
逻辑与运算符 13级
逻辑或运算符 14 级
三元条件运算符 15级
赋值运算符 16 级
逗号运算符 17级
优先级等级口诀
圆方括号、箭头一句号, 自增自减非反负、针强地址长度,
乘除,加减,再移位,
小等大等、等等不等,
八位与,七位异,六位或,五与,四或,三疑,二赋,一真逗。
其中“,”号为一个等级分段。
优先级等级注释
“圆方括号、箭头一句号”指的是第1级的运算符。其中圆方括号很明显“()、[]”,箭头 指的是指向结构体成员运算符“->”,句号 指的是结构体成员运算符“.” ;
“自增自减非反负、针强地址长度”指的是第2级的运算符。其中 非 指的是逻辑运算符“!”,反 指的是按位取反运算符“~”,负 指的是负号运算符“-”,针 指的是指针运算符“*”,
强指 的是强制类型转换运算符,地址 指的是地址运算符“&”,长度 指的是长度运算符“sizeof ”;
“乘除,加减,再移位”移位指的是左移运算符“<<”和右移运算符“>>”,其中除法还包括了 取余运算符“%”;
“小等大等、等等不等” 指的是第6级到第7级的运算符:<、<=、>和>=,等等指的是等于运算符==,不等指的是不等于运算符!=
“八位与,七位异,六位或”其中 八位与 指的是第8级的 按位与 运算符“&”,七位异 指的是第9级的按位异或运算符“^”,六位或 指的是第10级的按位或运算符“|”;
“五与,四或”指的是第11级、第12级的逻辑与运算符“&&”和逻辑或运算符“||”;
“三疑,二赋,一真逗”指的是第13级到第15级的运算符。其中,三疑指的是条件运算符“?:” (三有双重含义:即指优先级别是三,它的运算符类型也是三目,疑也取“?”之 意),
二赋 指的是赋值运算符=、+=、-=、*=、/=、%=、>>=、<<=、&=、^=和|= ,一真逗 指的是第15级的“,”运算符,真字只是为了语句需要罢了。
后缀表达式 2级
单目/一元运算 3级
强制类型表达式 4级
乘法表达式 5级
加法运算符 6级
移位运算符 7级
关系运算符 8级
相等运算符 9级
位与运算符 10级
位异或运算符 11级
位或运算符 12 级
逻辑与运算符 13级
逻辑或运算符 14 级
三元条件运算符 15级
赋值运算符 16 级
逗号运算符 17级
优先级等级口诀
圆方括号、箭头一句号, 自增自减非反负、针强地址长度,
乘除,加减,再移位,
小等大等、等等不等,
八位与,七位异,六位或,五与,四或,三疑,二赋,一真逗。
其中“,”号为一个等级分段。
优先级等级注释
“圆方括号、箭头一句号”指的是第1级的运算符。其中圆方括号很明显“()、[]”,箭头 指的是指向结构体成员运算符“->”,句号 指的是结构体成员运算符“.” ;
“自增自减非反负、针强地址长度”指的是第2级的运算符。其中 非 指的是逻辑运算符“!”,反 指的是按位取反运算符“~”,负 指的是负号运算符“-”,针 指的是指针运算符“*”,
强指 的是强制类型转换运算符,地址 指的是地址运算符“&”,长度 指的是长度运算符“sizeof ”;
“乘除,加减,再移位”移位指的是左移运算符“<<”和右移运算符“>>”,其中除法还包括了 取余运算符“%”;
“小等大等、等等不等” 指的是第6级到第7级的运算符:<、<=、>和>=,等等指的是等于运算符==,不等指的是不等于运算符!=
“八位与,七位异,六位或”其中 八位与 指的是第8级的 按位与 运算符“&”,七位异 指的是第9级的按位异或运算符“^”,六位或 指的是第10级的按位或运算符“|”;
“五与,四或”指的是第11级、第12级的逻辑与运算符“&&”和逻辑或运算符“||”;
“三疑,二赋,一真逗”指的是第13级到第15级的运算符。其中,三疑指的是条件运算符“?:” (三有双重含义:即指优先级别是三,它的运算符类型也是三目,疑也取“?”之 意),
二赋 指的是赋值运算符=、+=、-=、*=、/=、%=、>>=、<<=、&=、^=和|= ,一真逗 指的是第15级的“,”运算符,真字只是为了语句需要罢了。