1.vim的常用编程指令
yy | 复制光标所在行 |
dd | 删除光标所在行 |
p | 粘贴 |
myy | 复制光标所在行开始的往下m行 |
np | 从光标所在行下一行开始粘贴n次 |
u | 撤销上一次操作 |
Ctrl + r | 反撤销 |
shift + : | 进入底行模式 |
i | 进入插入模式 |
w | 保存 |
q | 退出 |
wq | 保存并退出 |
wq! | 强制保存并退出 |
w! | 强制退出 |
Ctrl + v + 方向键 | 块选中 |
Shift + v + 方向键 | 行选中 |
(1)命令模式下
yy+p //复制光标所在行 + 粘贴到光标所在行的下一行
5yy+p // 复制光标所在行开始的往下5行 + 从光标所在行下一行开始粘贴
2yy+3p //复制光标所在行开始的往下2行 + 从光标所在行下一行开始粘贴3次
shift + v +方向键 //行选中,这往往不是行选中的目的,通常是为了再使用其他指令,如复 制,剪切等
ctl + v + 方向键 //块选中,这往往不是块选中的目的,通常是为了再使用其他指令,如复 制,剪切等
(2)底行模式下
先底行模式下:10,14 y + 回车 //复制第10到第14行
再命令模式下:p //从光标所在行下一行开始粘贴
同理10,14 d + 回车 //删除第10到第14行
2. 计算机基础知识
(1)计算机的组成
硬件 :CPU(运算器+控制器)
存储器 :内存 + 硬盘
输入设备:鼠标、键盘、麦克风
输出设备:屏幕 、扬声器、打印机
软件 : 操作系统:a.文件管理
b.进程管理
c.存储管理
d.网络管理
e.CPU管理
(2)进制的转换
进制即进位的制度,“逢几进一即为几进制”
十进制
十转二:除二取余,从下到上
二转十:加权求和
用BCD码
10进制转R进制:10对R 做短除法 ,商从高到低进行书写,就是对应的R进制数。
R进制转10进制: 将该R进制的,每一位的上的数值乘上该位的位权,整体求和就是其对 应的十进制数。
十六进制
十六转二:1位 十六进制数对应 4位 二进制数
二转十六:4位 二进制数对应 1位 十六进制数
注意均结合BCD码(8421)
八进制
八转二:1位 八进制数对应 3位 二进制数
二转八:3位 二进制数对应 1位 八进制数
注意均结合BCD码(421)
二进制
(3)数据类型
初识数据类型 :新生儿的数量 整数
身高体重 小数
统计名字 字符数据
注意以下对于计算机而言这是两种不同类型的数据
1+2 (整数型运算)
1.0+2.0 (浮点型运算)
不同类型的数据 --- 机器指令不同 --- 最终调用硬件的部件不同 (根据数据类型选择对应的运算 单元是为了更快的计算)
基本数据类型 :整型
浮点型
字符型
常量与变量 : 在程序运行过程中,值不能被改变的量 --常量
值能被改变的量 --变量
整型 : <1> 常量形式
123 //十进制
0x123 //十六进制
0123 //八进制
<2> 变量形式
语法 : 数据类型 变量名
int // 4个字节长度(一个字节代表8个二进制位)
short // 2个字节长度
long // 8个字节长度
long long // 8个字节长度
eg:int a
int a = 10; //初始化(开辟文件名为a的内存空间,再放入值10)
注意变量名起名规则
1.数字,字母,下划线
2.数字不是开头
3.区分大小写
4.不能与关键字重名
5.不要和系统二级关键词重名 (include 预处理的命令)
6.不能与库函数重名
signed / unsigned // 有符号数,无符号数
有符号数,以数据最高位为符号位其余为数值位(正数或负数)
符号位 | 数值位
0 | 000 0000 0000 0000 0000 0000 0111 1011 // +123
1 | 000 0000 0000 0000 0000 0000 0111 1011 // -123
无符号数,所有位都为数值位(非负数)
<3> 数据在内存中的存储形式
大端存储
小端存储 : 高位数据 存储在 高地址处 (高高低低)
低位数据 存储在 低地址处
ARM架构中通常既可大端存储,又可小端存储(可由开关决定)
Inter 体系下通常是小端存储
数据在内存中的存储形式,都是以其对应的二进制原码的补码形式存储在内存中
补码是为了用加代替减
正数的 原码 反码 补码 都是一样的
负数的 补码 = 反码+1
原码
1|000 0000 0000 0000 0000 0000 0111 1011 //-123
反码
符号位不变,其余位按位取反
1|111 1111 1111 1111 1111 1111 1000 0100 //-123
补码 反码 + 1
1|111 1111 1111 1111 1111 1111 1000 0101 //-123
f f f f f f 8 5
练习:5678
-5678
0000 0000 0000 0000 0001 0110 0010 1110 // 5678(放在四字节空间,前面补零)
0 0 0 0 1 6 2 e
1|000 0000 0000 0000 0001 0110 0010 1110 // -5678
1|111 1111 1111 1111 1110 1001 1101 0010 // -5678 补码
f f f f e 9 d 2
<4> 数据类型的大小
由补码求原码:对补码再求一次补码(符号位不动,其余位取反再加一)
求补码的逆过程(符号位不动,先减一再取反)
unsigned int [0~2^32-1] signed int [-2^31 ~ +2^31-1]
unsigned short [0~2^16-1] //65536-1
signed short [-2^15 ~ +2^15-1] //-32768 ~ 32768-1
<5>整型的溢出
向上溢出
1111 1111 1111 1111
+ 1
----------------------------
1 0000 0000 0000 0000 // short i 所开辟的两个字节空间已被占满,再加 1 便只能向上 溢出
观察到程序运行后数值一直循环,这是因为空间最大为65535,再自增1便向上溢出,自身清零了
向下溢出
0000 0000 0000 0000
- 1
-----------------------------
1 1111 1111 1111 1111 // short i 所开辟的两个字节空间内值为0,要减 1 便只能向上 借位,就向下溢出了
浮点型:
<1> 常量形式
1.234
1.2e3 //科学计数法形式 //1.2*10^3
1.2E3 //e后面 可以是正数 或 负数 不能是小数
<2> 变量形式
float //单精度 (所谓精度,是以尾数位数来衡量的,后者为前者的两倍多)
double //双精度
float 4字节
符号位|指数位|尾数位
| 8 位 | 23位
+127 // 偏移量
double 8字节
符号位|指数位|尾数位
| 11位 | 52位
+1023
<3>数据在内存中的存储形式
eg : 6.5
step1: 将小数 转换为 二进制形式的小数
整数部分: (除2取余法)
0110
小数部分:(乘2取整法)
0.25 * 2 = 0.5 --- 0
0.5 * 2 = 1 --- 1
组合:
0110.01
step2:将二进制形式的小数,写成科学计数法形式
1234.56 ---> 1.23456*10^3
110.01 ---> 1.1001 * 2^2 //科学计数法形式
step3:按照 IEEE 754 标准存放
1位 符号位 | 8位 指数位 | 尾数位
| 2 + 127 |
| -127~128 |
0 1000 0001 1001 0000 0000 0000 0000 // 不够的后面补零
0100 0000 1100 1000 0000 0000 0000 0000 // 以四位为一组重新划分,不够的补零,补 足32位
4 0 c 8 0 0 0 0 // 写为16进制数形式,这只是为了方便显示 存储情况,实际仍以上式二进制数形式存储
<4> 关于默认
浮点常量的类型
0.9默认识别为double类型
0.9f //表示识别为 float类型
0.9L //L表示long double
整型常量的类型
123L //long int
123LL //long long int
123UL //unsigned long int
字符型:
a b c
t <--->0100101010
a <--->0101010
字符数据存储到计算机
a ---> 编码值 (数值) ---> 无符号的整数
因此字符型可以认为是整型的一种,字符型数据和整型数据是通用的,本质都是整数
<1> 常量形式:
'a' // 字符常量
<2> 变量形式:
char ch; // tiny int (小整型)
unsigned char [0~2^8-1] //255
signed char [-2^7~+2^7-1] //-128~127-1
<3> ASCII表:
0~32 控制字符 不可见
'0'~'9' //48~57
'A'~'Z' //65~90
'a'~'z' //97~122
'0' ---> 0 //减 48 或 '0'
大小写转换加减32