操作符的分类
1.算术操作符
移位操作符
位操作符
赋值操作符
单目操作符
关系操作符
逻辑操作符
条件操作符
逗号表达式
下标引用、函数调用和结构成员 算术操作符
1. 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。 2. 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。 3. % 操作符的两个操作数必须为整数。返回的是整除之后的余数。 移位操作符
左移操作符 移位规则:
* - * / %
<< 左移操作符 >> 右移操作符
移位规则:左边抛弃、右边补0
num<<1表示为向左移动一位
2.向右移动方法
2. 逻辑移位 左边用0填充,右边丢弃
3. 算术移位 左边用原该值的符号位填充,右边丢弃。
3.位操作符
& :按位与(对应的二进制数均为1时结果位为1 ,否则为0)| :按位或(对应的二进制位有一个为1时,结果位就为1,两个都是零时结果为零)^ : 按位异或(对应二进制位相同为0,不同为1)注意:他们的操作数必须是整数
4.移位运算符不能移动负数位置
5.复合赋值符号
+= -=
*= /=
%= >>= <<=
&= |=
^=
6.单目操作符
! 逻辑反操作
* 负值
+正值
取地址 sizeof 操作数的类型长度(以字节为单位) ~ 对一个数的二进制按位取反 – 前置、后置-++ 前置、后置++ * 间接访问操作符(解引用操作符) (类型) 强制类型转换
7.关系操作符
= < <= ! = (不等于) ==
8.逻辑操作符
&& 逻辑与
|| 逻辑或
9.条件操作符
。。?。。。:。。
条件1为真执行条件二
为假的执行条件三
10.逗号表达式只执行最后一个
11.整型提升
表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度一般就是int 的字节长度,同时也是CPU的通用寄存器的长度。 因此,即使两个char类型的相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长度。 通用CPU(general-purpose CPU)是难以直接实现两个8比特字节直接相加运算(虽然机器指令中可能有这 种字节相加指令)。所以,表达式中各种长度可能小于int长度的整型值,都必须先转换为int或unsigned int 然后才能送入CPU去执行运算
1.负数的整型提升
char c1 = -1; 变量c1的二进制位(补码)中只有8个比特位: 1111111 因为 char 为有符号的 char 所以整形提升的时候,高位补充符号位,即为1 提升之后的结果是: 11111111111111111111111111111111
2.正数的整型提升
char c2 = 1; 变量c2的二进制位(补码)中只有8个比特位: 00000001 因为 char 为有符号的 char 所以整形提升的时候,高位补充符号位,即为0 提升之后的结果是: 00000000000000000000000000000001
//无符号整形提升,高位补0
//实例1 int main() { char a = 0xb6; short b = 0xb600; int c = 0xb6000000; if(a0xb6) printf(“a”); if(b0xb600) printf(“b”); if(c==0xb6000000) printf(“c”); return 0; }
13.操作符的属性
1.操作符的优先级
2.操作符的结合性
3.是否控制求值顺序
两个相邻的操作符先执行哪个?取决于他们的优先级。如果两者的优先级相同,取决于他们的结合性。
14.
操作符的顺序优先级
顺序表可在课件中查询
15.下标引用操作符
[ ]
操作数:一个数组名 + 一个索引值
16.函数调用操作符
( )
接受一个或多个操作数:第一个操作数是函数名,剩余的操作数都是传递给函数的参数。