操作符的分类:
算术操作符 移位操作符 位操作符 赋值操作符 逻辑操作符 单目操作符 关系操作符 条件操作符 逗号表达式 下标引用 函数调用和结构成员
算术操作符
+ 加 - 减 * 乘 / 除 % 取余数移位操作符
<< 左移 >> 右移左移操作符 移位规则: 左边抛弃,右边补0。
右移操作符 移位规则: 右移运算分两种: 1.算术右移:左边用该值的符号位填充。 2.逻辑右移:左边用0补充,右边丢弃。
int a=3; int b=5; a>>1; 011 010 a=2; b<<1; 101 1010 b=10;位操作符
& 按位与 ^ 按位异或 | 按位或注:他们的操作数必须是整数。(位操作符的应用见我的第二篇博客)
赋值操作符 复合赋值操作符
= 赋值 += a=a+1可以写为a+=1 -= a=a-1可以写为a-=1 *= a=a*1可以写为a*=1 /= a=a/1可以写为a/=1 ^= a=a^1可以写为a^=1 &= a=a&1可以写为a&=1 %= a=a%1可以写为a%=1 >>= a=a>>1可以写为a>>1 <<= a=a<<1可以写为a<<1单目操作符:
! 逻辑取反操作 + 正 - 负 ~ 按位取反 (类型) 强制类型转换 (应用见指针进阶博客) sizeof 操作数类型长度 * 间接访问(解引用操作符) (应用见指针博客) & 取地址 ++ 前置++,后置++ 前置++,先++,后使用 后置++,先使用,后++ -- 前置--,后置-- 前置--,先--,后使用 后置--,先使用,后--关系操作符:
== 用于测试(判断)等于 != 用于测试(判断)不等于 <= 小于等于 >= 大于等于 < 大于 > 小于逻辑操作符:
&& 逻辑与 || 逻辑或条件表达式:
exp1?exp2:exp3 exp1,exp2...expN逗号表达式:从左向右依次执行,整个表达式的结果是最后一个表达式的结果
下标引用操作符:
[] arr[10]函数调用操作符:
() Add(10,20);访问结构体的成员
. ->整型提升 (隐式发生):两个char类型的变量相加,需要提升成一个普通整型的字节长度。
char a = 3; char b = 127; 00000011 a 01111111 b 00000000000000000000000000000011 补充符号位 00000000000000000000000001111111 补充符号位 00000000000000000000000010000010 a+b 10000010 c 11111111111111111111111110000010 补充符号位 11111111111111111111111100000001 c反码 10000000000000000000000011111110 c原码 char c = a + b; printf("%d\n",c);输出结果为-126,而不是130。 算术转换(隐式转换):如果一个int类型的变量和一个double类型的变量进行计算,则 先将int 类型转换为double类型(向上转换)。
操作符的属性: 1.操作符的优先级 2.操作府的结合性 3.是否控制求值顺序
结合性:
L-R(从左向右)R-L(从右向左)( )++[ ]- -.+=->-=++*=- -/=+%=->>=*<<=/&%*>>sizeof<<()>&=<^=>=|=<====/!=/&/&&/^/| |/,/