一.20240723补充:vim编辑器进阶
N "YY" + M "P"
命令模式下输入命令“YY”,可对光标下一行内容进行复制,在命令前加入数字N,则可以复制N行内容;输入命令“P”可以将复制过的内容粘贴至光标下一行。同样的,在“P”命令前加入数字M ,可以将以复制内容粘贴M次;
"SHIFT" + "V"
在命令模式下输入“SHIFT + V“,可以进入【visual block】模式,即块模式,。在该模式下可以通过方向键,以光标所在行为初始行,以行为单位进行选中。选中后可以通过”Y“ + M”P“命令进行复制粘贴。
N"DD" + M"P"
在命令模式下,通过输入”DD“,可对光标下一行内容进行剪切,在命令前加入数字N,则可以剪切N行内容;如若只进行剪切,不进行粘贴操作,则”DD“命令可以等效为删除。
"U" & "CTRL" + "R"
在命令模式下输入"U",可以撤销上一次操作;输入"CTRL" + "R",可以撤销上一次撤销命令,即反撤销。
二.数据类型
数据类型的含义是数据种类的划分,常见的数据类型有以下六种:整型、字符型、浮点型、构造数据类型、指针类型、空类型。
常量:在程序运行过程中,值不能被改变的量。
变量:在程序运行过程中,值可以被改变的量。
注意区分常量和变量需要将代码运行起来,在Linux命令行中具体表现形式即"./a.out"命令执行之后,到"linux@ubuntu:~$"出现之前,在这之间值不改变的量为常量,反之则为变量。
整型(integer)
常量形式:
123 //十进制的整型常量
0x123 //十六进制的整型常量
0123 //八进制的整型常量
进制:
常见进制有二进制、八进制、十六进制和自然世界中的十进制,分别用字母B、O、H和D表示,在代码中二进制用0b****来表示,八进制用0****表示,十进制直接用数字表示,十六进制用0x****表示。
十进制转换为二进制
辗转相除法,也称除二取余法:
2|123
2|61 ... 1 (低位)
2|30 ... 1
2|15 ... 0
2|7 ... 1
2|3 ... 1
2|1 ... 1
2|0 ... 1 (高位)
111 1011
0111 1011
二进制转换为十进制采用的方法为加权求和法:
1111011
64 32 16 8 4 2 1
2^1 2^0
1 1 1 1 0 1 1
64 + 2 + 16 + 8 + 2 + 1
二进制转换为八进制:
1位八进制数,对应3位二进制数
H 0 1 2 3 4 5 6 7
B 0 1 10 11 100 101 110 111
二进制转换为十六进制:
1位十六进制数,对应4位二进制数
B 0111 1011 0110 1101
X 7 b 6 d
整型变量:
变量名:
是一个名字、标识符
命名规则:
由数字、字母、下划线组成;开头不能为数字、不能与关键字重复、不要与预处理命令和库函数名重复。
数据类型的大小:
int、unsigned int 4byte
short、unsigned short 2byte
long、unsigned long 8byte
long long、unsigned long long 8byte
sizeof(运算数)---计算运算数所代表的数据类型所占用的内存空间的字节数
变量给值:
int a = 10; //定义时给值:格式化
int a;
a = 10; //赋值
变量之所以可以变化,因为变量实际上是对应的一块可被修改的空间。
数据在计算机中的存储方式分为大端模式和小端模式。
小端模式:高位数据存储在高地址空间,低位数据存储在低地址空间。
大端模式:高位数据存储在低地址空间,低位数据存储在高地址空间。
整型数据的存储:
默认使用小端模式
计算机中存储的数据都是他们的补码。
//正数补码=反码=原码
int a = 123;
123
0111 1011 //原码
0111 1011 //反码
0111 1011 //补码
//负数
int a = -7;
-7
1|000 0000 0000 0000 0000 0000 0000 0111 //原码
1|111 1111 1111 1111 1111 1111 1111 1000 //反码
1|111 1111 1111 1111 1111 1111 1111 1001 //补码
f f f f f f f 9
//负数的反码是原码的符号位不变其余位按位取反
数据溢出:
各个类型整型变量有固定的取值范围,超出取值范围会发生数据溢出
1111 1111 1111 1111
+ 1
----------------------
1 0000 0000 0000 0000 //溢出
浮点型(float)
常量形式:
1.23、1.23e-4(科学计数法)、1.23E-4。
关键字:
float:单精度 4byte
double:双精度 8byte
long double:高精度 16byte
浮点数的存储:
12.125存储到计算机
①将十进制形式的小数转换成二进制小数
整数:除二取余
小数:乘二取整
12.125
//整数
12 --- 1100
//小数
0.125 * 2 = 0.25 --- 0
0.25 * 2 = 0.5 --- 0
0.5 * 2 = 1 --- 1
0.001
1100.001
②将二进制形式的小数写成科学计数法
1100.001 => 1.100001 * 2^3
| |
尾数 指数
③按照FEEE754标准存放
1位符号位 | 8位指数位 | 23位尾数位
0 | 100001
3+127(偏移量)
0100 0001 0100 0010 0000 0000 0000 0000
4 1 4 2 0 0 0 0
double:
1位符号位 | 11位指数位 | 52位尾数位
|
x+1023(偏移量)
常量默认类型:
0.9:double型
0.9f:float型
123:int型
123L:long型
123LL:long long型
123LU:unsigned long型
字符型(character)
符号存储在计算机中需要通过编码,常用编码位ascii编码
常用编码值:
0~32:控制字符,如空格、换行等不可见字符
48~57:数字字符'0' - '9'
65~90:英文字母'A' - 'Z'
97~122:英文字母'a' - 'z'
字符型常量:
'A' :A这个常量
字符型变量:
char ch;
ch = 'a';在ch变量中实际存放的是'a'对应的ascii编码值(整型)
char 1byte
int 4byte
所以char又称为 tiny int,与int通用:
char ch = 'a';
unsigned char ch = -10;
char ch = '1';
printf("%d\n",ch); //输出1
printf("%c\n",'1'); //输出1