操作符分为以下几类:
一. 算术操作符
+ - * / % (取模运算)
其中%(取模运算符)的两个操作数必须是整数。
而 /(除号运算符),若是左右两个操作符都是整型数,不管该结果是什么类型,结果都是个整数,小数点后原有的数会被默认舍去。栗子如下:
#include<stdio.h>
int main()
{
int a = 3;
int b = 2;
float c = 0;
c = a / b;
printf("%f\n",c);
}
打印的结果如下,本来结果应该是1.5,但其实结果是1.000000
若要得到正确的结果,必须使 / 的两个操作数中,有一个为浮点类型。
二.移位操作符
<< (左移操作符) >> (右移操作符)
在这里只需要明白,移位操作符,移动的是该数对应的二进制序列就好。
特别需要注意的是:左移不需要担心符号位的问题,只用在左移之后在最右边补零即可。但是右移还要看该数的正负,
因此右移分为两种移法:
1、算术右移;
2、逻辑移位。算术右移情况指的是:二进制数有正负之分,补位时要注意符号位;逻辑移位情况指的是:不需要考虑符号产生的问题,直接补0即可。
三.位操作符
& (按位与) ^ (按位异或) |(按位或)
&(按位与):
如果两个位上的数都为1,结果为1;否则结果为0 ;
| (按位或):
如果两个位上的数都是0,结果为0;否则结果为1 ;
^ (按位异或):
如果两个位上的数不同,结果为1;如果两个位上的数相同,结果为0。
注意 : 他们的操作数必须为整数。
四.单目操作符
! 逻辑反操作符
- 负号
+ 正号
& 取地址运算符
sizeof 操作数的类型长度(以字节为单位0)
~ 对一个数的二进制进行按位取反
++ 前置先加一,再代入计算(后置相反)
-- 前置先减一,再代入计算(后置相反)
* 解引用操作符(间接访问操作符)
(类型) 强制类型转换
五.关系操作符
> < == >= <= !=
要注意区别:
判断相等的运算符 == 与赋值运算符 =。
六.逻辑操作符
&& (逻辑与) || (逻辑或)
七.条件操作符
excep1?excep2:excep3
条件操作符接受三个操作数,并且会控制子表达式的求值顺序。 首先算exp1,若它的值为非0值,即为真,那么整个表达式的值为exp2,对exp3不会求值; 但是如果exp1的值为假,那么不对exp2 求值,整个表达式的值为exp3。
八.逗号表达式
excep1,excep2,excep3,excep4,...excep
这些表达式自左向右逐个进行求值,整个逗号表达式的值就是最后一个表达式的值。
九.下标引用、函数调用和结构成员
[] (下标引用操作符:一个数组名 + 一个索引值)
() (函数调用操作符:接受一个或者多个操作数,第一个操作数是函数名,剩余的操作数就是传递给函数的参数)
. (访问一个结构的成员:结构体. 成员名)
-> (结构体指针->成员名)