C语言的操作符可以分俩大点,一是其各类操作符,二是其表达式的求值。
我们今天对这些知识点进行一个整理。
一、操作符
1.算术操作符
+(加) -(减) *(乘) /(除) %(取模)
2.移位操作符
<<(左移) >>(右移)
移位规则:
左移: 左边抛弃,右边补0
右移:
(1)逻辑移位:左边补0,右边丢弃
(2)算术移位:左边补符号位,右边丢弃
注:num>>-1//error 这个标准是未定义的
3.位操作符
& (按位与) |(按位或) ^(按位异或)
4.赋值操作符
复合赋值符:
+= -= *= /= %= >>= <<= &= |= ^=
5.单目操作符
! //逻辑反
- //负值
+ //正值
& //取地址
sizeof //操作数的类型长度
~ //对一个数的二进制按位取反
-- /++ //前置、后置
* //间接访问操作符(解引用操作符)
(类型) //强制类型转换
6.关系操作符
> >= < <= != ==
7.逻辑操作符
&&(逻辑与) ||(逻辑或)
8.条件操作符
exp1 ? exp2 : exp3 //exp1成立取exp2,否则取exp3
9.逗号表达式
exp1,exp2,exp3,exp4 //整个表达式的结果是最后一个表达式的结果
二、表达式求值
在求值的过程中,我们会出现很多情况,比如说表达式中的字符char为短整型,而C的整型算术运算总是以缺省整型类型的精度来进行的,所以在这类的计算中,我们需要进行转换,而这种转换称为整型提升。
通俗来讲,CPU内整形运算器的操作数的字节长度一般为int的字节长度,也是其寄存器的长度。所以,当俩个char类型相加时,要先成CPU内整型操作数的标准长度。
整型提升时看变量自身的类型。
1.负数整型提升时,高位补充符号位1.
2.正数整型提升时,高位补充符号位0.
3.无符号整型提升时,高位补充0.
只要参与了运算,就会发生整型提升!