操作符详解
1.算术操作符:+ – * / %
笔记:
(1)% 操作符的两个操作数必须为整数,返回的是整除之后的余数
(2)除了 % 操作符之外,其余均可以作用于整数和浮点数
(3)对于 / 操作符如果两个操作数都为整数,执行整数除法;而只要有浮点数执行的就是浮点数除法,返回的是整除之后的商
2.移位操作符:
(1)>> 右移操作符(类似于/2)
(2)<< 左移操作符(类似于*2)
笔记:
(1)任何整数在计算机中以补码的形式存储,所以移位时操作数为补码
(2)正数的原码,反码,补码相同
(3)原码最高位为1表示负数;最高位为0表示正数
(4)原码转换为反码:最高位不变,其他位按位取反
(5)反码转换为补码:反码的二进制+1
(6)右移分为算术右移和逻辑右移(由编辑器选择右移方式)
算术右移:右边丢弃,最高位补符号位(vs)
逻辑右移:右边丢弃,最高位补0
(7)左移方式:左边丢弃,末尾补0
注意:对于移位运算符,不要移动负数位,这个是标准未定义的
实例:
int b = -1;
//原码:100000000000000000000001
//反码:111111111111111111111110
//补码:111111111111111111111111
int a = 10;
//原码:000000000000000000001010
//反码:000000000000000000001010
//补码:000000000000000000001010
3.位操作符:
(1) & 按位与:同1为1,否则为0
(2) | 按位或:有1为1
(3) ^ 按位异或:相异为1,否则为0
笔记:他们的操作数必须是整数。
4.赋值操作符:=
5.复合赋值符:+=,-= ,*=,/=,%=,>>=,<<=,&=,|=,^=
a = a + 1;
a += 1;
6.单目操作符:
(1).! 逻辑反操作
(2). - 负值
(3). + 正值
(4). & 取地址
(5).sizeof() 操作数的类型长度(以字节为单位)
(6). ~ 对一个数的二进制按位取反
(7).- - 自减
(8).++ 自增
(9). * 间接访问操作符(解引用操作)
(10).(类型) 强制类型转换
实例:
int a = (int)3.14;
7.关系操作符:
(1). > 大于
(2). < 小于
(3). >= 大于等于
(4). <= 小于等于
(5). != 不等于
(6). == 判断相等
8.逻辑操作符:只判断真假,不关注二进制位
(1). && 逻辑与(左边为真才计算,为假停止计算)
实例:
#include <stdio.h>
int main()
{
int i = 0, a = 0, b = 2, c = 3, d = 4;
i = a++ && ++b && d++;//a=0为假,停止计算
printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
return 0;
}//答案为:1 2 3 4
(2). || 逻辑或(左边为假才计算,为真停止计算)
实例:
#include <stdio.h>
int main()
{
int i = 0, a = 1, b = 2, c = 3, d = 4;
i = a++||++b||d++;//a为真,则停止计算
printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
return 0;
}//答案为:2 2 3 4
9.条件操作符:exp1 ? exp2(为真) : exp3(为假)
10.逗号表达式:exp1, exp2, exp3, …expN
笔记:从左向右依次计算。整个表达式的结果是最后一个表达式的结果。
实例:
int main()
{
int a = 1;
int b = 2;
int c = (a > b, a = b + 10, a, b = a + 1);//从左向右依次执行
printf("%d\n", c);
return 0;
}//答案为13
11.下标引用、函数调用和结构成员
(1).[ ] 下标引用操作符
(2).( ) 函数调用操作符:接受一个或者多个操作数,第一个操作数是函数名,剩余的操作数就是传递给函数的参数。