操作符总结:
一、算术操作符:+、 -、 *、 /、 %
注意:%不可以做浮点数运算

二、移位操作符: << 左移操作符 >>右移操作符
右移规则:
逻辑移位:左边补零,右边丢弃 (unsigned)
算术移位:左边补符号位,右边丢弃
左移规则:左边舍弃,右移补零。
ps:在移位后,数值本身没有赋值。(值传到cpu计算后,没有将所算的值重新付给内存这个过程)。

三、位操作符:&、 | 、^
注意:他们的操作数必须是整数。
练习题:
1、无临时变量将两个值进行交换。(^实现:a=a^b,b=a^b,a=a^b)
2、求一个整数存储在内存的二进制中1的个数。(&:num=num&(num-1) 避免重复32次,做无效的判断)

四、赋值操作符:+= 、 -= 、 = 、/= 、*=、 %=、 >>=、 <<= 、&= 、 |= 、^=
作用:使写法简洁

五、单目操作符:! - + & sizeof ~ -- ++ (类型)
说明:1. & 取地址符(输出地址%p)
2.sizeof 求操作符的类型长度(单位:字节) 在编译使就执行了。
注意sizeof求数组大小时数组在哪里开辟,就在那里用sizeof求数组大小。因为数组在传参时传的是数组指针,计算的是指针大小。

六、关系操作符: > 、< 、 >=、 <= 、 !=、 ==
注意:1. 由于浮点数在存储过程中会有精度损失,因而不要用浮点数判等,用小于某精度替换。
2.为避免在判等过程中,==不小心写为=,因而在判等时将常数写在前面。

七、逻辑操作符:&&、 ||
注意:只要遇见可以判断表达式结果,则后面的都不会再做判断了。(&&运算时,遇见表达式等于零,则后面的表达式就不执行了;||遇见表达式等于1,则后面的表达式就不执行了)

八、条件操作符: exp1 ? exp2 :exp3 exp1成立选exp2执行,不成立选exp3执行。等同于一个if...else...语句。
九、逗号表达式:(exp1,exp2……expn) 从左到右依次执行,整个表达式的结果是最后一个表达式的结果。

九、下表引用、函数调用和结构成员
1.[ ] 下表引用操作符: 操作数:一个数组名+一个索引值
Eg:int arr[10]; //创建数组 [ ]的两个操作数是arr和9
arr [0]=10; //使用下标引用操作符找空间存数 arr[0]=(arr+0)
2.()函数调用操作符,接受一个或多个操作数:第一个是函数名,剩余的操作数就是传给函数的参数。
3.访问结构体成员: . :结构体.成员名 -> 结构体指针->成员名