操作符的分类 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.函数调用操作符 ( ) 接受一个或多个操作数:第一个操作数是函数名,剩余的操作数都是传递给函数的参数。