1:算术操作符
+ - * / %
除了%操作符,其余几个操作符都是既适用于浮点型又适用于整数型。
当/操作符的两个操作数都是整数时,它执行整除运算,在其他情况下则执行浮点数除法。
%为取模操作符,它只接受两个整型操作数,把左操作数除以右操作数,但它返回的值是余数。
2:移位操作符
<< 左移操作符
移位规则:左边抛弃,右边补零
>>右移操作符
移位规则:(1):逻辑移位
左边用0填充,右边抛弃
(2):算术移位
左边用原值的符号位填充,右边丢弃
下面我们举例子说明,当操作数为有符号数时:
下面举例子说明一下赋值和没被赋值
上面结果表明:num在移位过程中,如果没有被赋值,自身的值不会变。
注意:无论左移还是右移,两个操作数都必须是整数型。
对于移位运算符,不要移动负位,这个是标准未定义的。
3:位操作符
& 按位与(同时为1才为1)
| 按位或(有1得1)
^ 按位异或(相同为0,相异为1;任何数和0异或都是它本身;相同的比特位异或清零)
注:他们的操作数必须是整数
4:赋值操作符
它具有结合性:
#include<stdio.h> #include<windows.h> int main() { int t=0, num =-10;//初始化 t=num=num << 1;//赋值 printf("%d\n %d\n", t,num); system("pause"); return 0; }
输出结果为:-20 -20
5:复合操作符
+= -= *= /= %= >>= <<= &= |= ^=
#include<stdio.h> #include<windows.h> int main() { int t=0, num =-10; t += num; //t=t+num; printf("%d\n", t);//-10 system("pause"); return 0; }
其他的运算符一样的道理。
6:单目操作符
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位,可以求变量所占空间大小)
~ 对一个数的二进制按位取反
-- 前置,后置--
++ 前置,后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换
7:关系运算符
>
>=
<=
!= 用于测试“不相等”
== 用于测试“相等”
注:注意==和=的区别。
8:逻辑操作符
&&逻辑与
||逻辑或
下面用例子说明它的用法,它其实实现了和if语句一样的功能。
10:逗号表达式
exp1,exp2,exp3,...expn
规则:逗号表达式从左向右依次执行,整个表达式的结果是最后一个表达式的结果。
11:下表引用、函数调用和结构成员
(1)操作数:一个数组名+一个索引值
(2)函数调用操作符
接受一个或者多个操作符:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
(3)访问一个结构的成员
结构体.成员名
结构体指针->成员名(用于访问一个结构的成员)
eg:s.a(访问s结构体变量中a的成员)
注:当你拥有一个指向结构的指针而不是结构本身,且欲访问它的成员时,就需要用->操作符而不是.