一、操作符的分类
- 算数操作符:+、-、*、/、%
- 移位操作符:<<、>>
- 位操作符:&、|、^
- 赋值操作符:=、+=、-=、*=、%=、<<=、>>=、&=、|=、^=
- 单目操作符:!、++、--、&、*、+、-、~、sizeof(无符号整型)、(类型)
- 关系操作符:>、>=、<、<=、==、!=
- 逻辑操作符:&&、||
- 条件操作符:?、:
- 逗号表达式:,
- 下标引用:[]
- 函数调用:()
- 结构成员访问:. 、 ->
二、二进制和进制转换
1.2进制转10进制
下表则是关于10进制的图表
而2进制和10进制也是类似的,只不过2进制的每一位权重,从右向左是:2^0,2^1,2^2…
2.10进制转2进制
2 125 余数为1
2 62 余数为0
2 31 余数为1
2 15 余数为1
2 7 余数为1
2 3 余数为1
2 1 余数为1
0
又下往上依次所得的余数就是10进制转换出的2进制
3.2进制转8进制
8进制的每一位数字都是0~7的
2进制 | 0 1 | 1 0 1 | 0 1 1 |
---|---|---|---|
8进制 | 1 | 5 | 3 |
4.2进制转16进制
16进制的每一位数字都是0~9,a~f
2进制 | 0 1 1 0 | 1 0 1 1 |
---|---|---|
16进制 | 6 | b |
三、原码、反码、补码
整数的二进制表示方法有三种,即原码、反码、补码
二进制中最高位的1位被当做符号位,剩余都是数值位
0表示“正”,1表示“负”
正整数的原、反、补码都相同
负整数的三种表示方法都不同
- 原码:直接将数值按照正负数的形式翻译成二进制得到的就是原码
- 反码:将原码的符号位置不变,其他位依次按位取反就可以得到反码
- 补码:反码+1
补码得到原码也是可以用:取反,+1的操作
四、移位操作符
<<左移操作符
>>右移操作符
注:移位操作符的操作数只能是整数
1.左移操作符
左边抛弃,右边补零
#include"stdio.h"
int main()
{
int num=10;
int n=num<<1;
printf("n=%d\n",n);
printf("num=%d\n",num);
return 0;
}
2.右移操作符
分为两种填充,右边抛弃:
- 逻辑右移:左边用零填充,右边抛弃
- 算数右移:左边用原该值的符号位
我们常用的VS编译器则是使用的算数右移
对于移位运算符,不要移动负数位,这是个标准未定义的。
1.int num = 10;
2.num>>-1;//error
五、位操作符:&、|、^、~
位操作符有:
1. & //按位与
1&1=1
1&0=0
0&1=0
0&0=0
2. | //按位或
1|1=1
1|0=1
0|1=1
0|0=0
3. ^ //按位异或
1^1=0
1^0=1
0^1=1
0^0=0
4. ~ //按位取反
把操作数的每一位都取反
注:他们的操作数必须是整数。
六、单目操作符
单目操作符有这些:
!、++、--、&、*、+、-、~、sizeof、(类型)
七、逗号表达式
1 exp1, exp2, exp3, …expN
![](https://i-blog.csdnimg.cn/direct/e70ba3ddce80401f9af2031aece643ce.png)
八、下标访问[ ]、函数调用()
1.[ ]下标引用操作符
操作数:一个数组名+一个索引值(下标)
1. int arr[10];//创建数组
2. arr[9] = 10;//实用下标引用操作符
3.[ ]的两个操作符是arr和9
2.函数调用操作符
接受一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数