1.操作符的分类
• 结构成员访问: . 、->
2.二进制和其他进制的转换
2.1 进制的定义
首先,我们要清楚我们平常所说的二进制、八进制、十六进制等等都是数值不同的表示形式而已,二进制就是用1和0表示数字。八进制就是用0~7表示数字。十六进制就是用1~15表示数字,但是为了防止与二进制混淆,规定用A~F分别表示1~15。
2.1.1 举例
数字15用各种进制表示
1.二进制:1111
2.八进制:17
3.十进制:15
4.十六进制:F
2.2 进制的转换
2.2.1 二进制转换为八进制
方法:8进制的数字每⼀位是0~7的,0~7的数字,各⾃写成2进制,最多有3个2进制位就⾜够了,从二进制序列中右边低位开始向左每三个二进制位换算成一个八进制位,剩余不够三个二进制位的直接换算成二进制。
举例:二进制的01101011,换成8进制:0153。 0开头的数字,会被当做8进制。
2.2.2 二进制转换为十六进制
方法:16进制的数字每⼀位是0~9,a ~f 的,0~9,a ~f的数字,各⾃写成2进制,最多有4个2进制位就⾜够了,⽐如 f 的⼆进制是1111,所以在2进制转16进制数的时候,从2进制序列中右边低位开始向左每4个2进制位会换算⼀个16进制位,剩余不够4个⼆进制位的直接换算。
举例:2进制的01101011,换成16进制:0x6b,用十六进制表示前面要加0x。
3. 原码、反码、补码
3.1 理解
1. 整数的2进制表示方法有三种,即原码、反码、补码。
2.有符号整数 (负数)的三种表示方法均有符号位和数值位两部分,最高位的一位是被当作符号位,剩余的都是数值位,符号位都是用0表示“正",用1表示”负“。
3.2 定义
1.原码:直接将数值按照正负数的形式翻译成二进制得到的就是原码。
2.反码:将源码的符号位不变,其他的依次取反(将1改为0)得到的就是反码。
3.补码:反码+1就得到补码。补码得到原码也可以使用取反,+1的操作。
3.1 深度理解补码
1.对于整形来说,数据存放内存中其实存放的就是补码。
原因:
在计算机系统中,数值⼀律⽤补码来表⽰和存储。原因在于,使⽤补码,可以将符号位和数值域统⼀处理;同时,加法和减法也可以统⼀处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
4.移位操作符——左移操作符 — << 右移操作符 —>>
4.1 左移操作符 <<
1.移位规则:左边抛弃,右边补零。
2.代码演示
#include <stdio.h>
int main()
{
int num = 10;
int n = num<<1;
printf("n= %d\n", n);
printf("num= %d\n", num);
return 0;
}
3.图解:
4.2 右移操作符
4.2.1 分类
右移操作分逻辑右移和算术右移,需要注意的是右移到底是算术右移还是逻辑右移是取决于编译器的实现,常见的编译器都是算术右移。
4.2.1 移位规则
1.逻辑右移:左边用0填充,右边丢弃·。
举例图解:
![](https://i-blog.csdnimg.cn/blog_migrate/8ebad3a626426661ccc4d21d092b5ba4.png)
5. 位操作符
5.1 & —— 按位与
计算规则:对应的二进制位有0则为0。
5.2 | —— 按或与
计算规则:有1则为1,两0则为0。
5.3 ^—— 按位异或
计算规则:相同位0,相异为1.
5.4 ~ —— 按位取反
计算规则:对二进制进行取反。
警告:位操作符的操作数必须是整数。
6. 单目操作符
1.种类:单⽬操作符有这些:!、++、--、&、*、+、-、~ 、sizeof、(类型)
2.特点:只有⼀个操作数
7. 逗号表达式
1.逗号表达式就是用逗号隔开多个表达式。
2.逗号表达式从左向右执行,最后一个表达式的结果是整一个逗号表达式的结果。
3.格式:表达式1,表达式2,表达式3……,表达式n
8. 下标访问——[]和函数调用——()
8.1 []——下标引用操作符
操作数:一个数组名+一个索引值(下标)
举例:
8.2 函数调用操作符
1.特点:接受一个或者多个操作数,第一个操作数是函数名,剩余的操作数就是传递给函数的参数。函数调用操作符至少需要一个操作数。