C语言基本操作符

末鹿安然 提交于 2019-11-30 01:08:23

操作符分类

  • 算数操作符
  • 移位操作符
  • 位操作符
  • 赋值操作符
  • 单目操作符
  • 关系操作符
  • 逻辑操作符
  • 条件操作符
  • 逗号表达式
  • 下标引用,结构体成员等

算数操作符``

+ - * /
  1. 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。
  2. 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
  3. % 操作符的两个操作数必须为整数。返回的是整除之后的余数。

移位操作符

<<    左移操作符:二进制序列的右边补0,对整型数左移相当于乘2
>>    右移操作符::分算数右移和逻辑右移,对整型数右移相当于除2

算术右移(左边补符号位)
例:int -1;右移时左边补符号位1
1111…1111(-1的补码)
1111…1111(右移后左边补符号位’1’,右边舍弃)
逻辑右移(左边补0)
例:unsigned int -1; 右移时左边补0
1111…1111(unsigned int -1的补码)0
0111…1111(右移后左边补‘0’,右边舍弃)

位操作符

& //按位与	有'0'则为'0',例101(5)&010(2)=0
| //按位或	有'1'则为'1',例111(7)|101(5)=111(7)
^ //按位异或     相同则为'0',不同则为'1',例1101(13)^0111(7)=1010(10)
&:两数只进位相加

应用:可用于清除二进制序列中的‘1’
例:int a=39; 二进制序列为:100111
a&(a-1)=38(100110)清除了最后面的1
a&(a-1)=36(100100)清除了最后面的1
每进行一次都把最后面的1变为0

^:两数不进位相加

应用:不用+实现两数相加

int a=5,b=4;
int a_t=0,b_t=0;
int total=0;
a_t=(a&b)<<1;	//a_t=8(二进制:1000)
b_t=a^b;	//b_t=1(二进制:001)
total=a_t^b_t	//total=9(二进制:1001)

赋值操作符

+=
-=
*=
/=
%=
>>=
<<=
&=
|=
^=

单目操作符

!      逻辑反操作
-      负值
+      正值
&      取地址
sizeof    操作数的类型长度(以字节为单位)
~      对一个数的二进制按位取反
--      前置、后置--
++      前置、后置++
*      间接访问操作符(解引用操作符)
(类型)    强制类型转换

关系操作符

>
>=
<
<=
!=  用于测试“不相等”
==    用于测试“相等”

逻辑操作符

&&   	逻辑与
||      逻辑或

条件操作符

exp1 ? exp2 : exp3
例
a=1>2?1:2;
相当于
if(1>2)
  a=1;
else
  a=2;

逗号表达式

exp1, exp2, exp3, …expN
逗号表达式,就是用逗号隔开的多个表达式。 逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果

int a = 1;
int b = 2;
int c = (a>b, a=b+10, a, b=a+1);
结果:a=12,b=13,c=13

操作符优先级

( )
[ ]
 . 	访问结构成员
 -> 	访问结构指针成员
单目操作符:如++,--,!,~...
 * 	间接访问
 & 	取地址
sizeof	取其长度,以字节表
算数操作符:如*,/,+,-...
移位操作符:<<,>>...
关系操作符:>,>=,<,<=...
位操作符
逻辑操作符
赋值操作符
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!