操作符#
操作符的分类:
算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符、逗号表达式、下标引用、函数调用和结构成员。\
其中,最需要掌握的操作符时:“与”(&)、“或”(|)、“异或”(^)、“左移”(<<)、“右移”(>>)、“指向符”(->)、“点操作符”(.)等。
算术操作符:
+、-、*、/、%
1.除%操作符之外,其他的几个操作符都可以作用于整数和浮点数;
2.对于/操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法;
3.%操作符的两个操作数都必须为整数,返回的是整数整除之后的余数。
移位操作符:
<< 左移操作符、>> 右移操作符
左移操作符移位规则:左边抛弃,右边补0,左移相当于乘法。
右移操作符移位规则:1.逻辑移位 左边补0,右边丢弃;2.算术移位 左边补符号位,右边丢弃。右移相当于除法。
注意:对于移位操作符参与运算,不能移动负数位,这个标准未定义。写程序时,移动负数位程序不会报错,但是不符合逻辑,不能这样写。
位操作符:
按位于“&”:全1才1,有0则0
按位或“|”:有1则1,全0才0
按位异或“^”:相同为0,不同为1
注:它们的操作数都必须是整数。
赋值操作符:
赋值操作符可以用于对变量重新赋值,其他的操作符还可以与赋值操作符连接组成复合操作符。
例如:a += b; // a = a + b
单目操作符:
单目操作符有:逻辑反操作“!”、负值“-”、正值“+”、取地址“&”、操作数的类型长度“sizeof”、按位取反“~”、前置或后置“--”、前置或后置“++”、间接访问操作符(解引用操作符)“ * ”、强制类型转换“(类型)”等
其中最需要注意的是sizeof,它用于求字节的大小,在编译时期确定表达式的字节大小,不会影响后面的结果,对于sizeof(表达式)只会判断表达式的类型,但不进行运算。
当用于数组中时,sizeof(数组名)代表的是整个数组的字节大小。
关系操作符:
最需要提的就是测试是否相等,“==”相等、“!=”不相等
逻辑操作符:
逻辑与“&&”、逻辑或“||”
在程序中,对与逻辑与,前面的为假,后面的都不再执行;而对于逻辑或,则是前面的为真,后面的都不再执行。
条件操作符:
exp1 ? exp2 : exp3
当exp1为真时返回exp2,否则返回exp3。
逗号表达式:
exp1 , exp2 , … , expN
逗号表达式就是用逗号隔开的多个表达式。逗号表达式是从左向右依次执行。整个表达式的结果时最后一个表达式的结果。
下标引用、函数调用和结构成员:
1.[ ]下标引用操作符
操作数:一个数组名+一个索引值
2.()函数调用操作符
接受一个或多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数。
3.访问一个结构体成员
. 结构体 . 成员名
-> 结构体指针->成员名:指向符自带解引用。例如:(*pstu). age==>pstu->age
两者都用于访问结构体成员。