第1次学习总结
Linux下的基本命令,基本数据类型,和数据以补码方式在计算机中存储。
day1总结
<a name = "1">手动编译过程</a>
- 预处理:预处理相当于根据预处理命令组装成新的 C 程序,不过常以 i 为扩展 名。
- 编 译:将得到的 i 文件翻译成汇编代码 .s 文件。
- 汇 编:将汇编文件翻译成机器指令,并打包成可重定位目标程序的 O 文件。
该文件是二进制文件,字节编码是机器指令。 - 链 接:将引用的其他 O 文件并入到我们程序所在的 o 文件中,处理得到最终
的可执行文件。
<a name = "1">Linux的目录和分区</a>
和之前的Windows电脑不同的是Linux打开之后没有发现类似C:/这样的盘符.这是因为Linux的分区是挂载到文件目录下的。文件目录描述的大致如下:
目录 | 描述 |
---|---|
/ | 根目录 |
/bin | 做为基础系统所需要的最基础的命令就是放在这里。比如 ls、cp、mkdir 等命令; |
/boot | Linux 的内核及引导系统程序所需要的文件 |
/dev | 一些必要的设备,比如声卡、磁盘等。 |
/ect | 系统的配置文件存放地.一些服务器的配置文件也在这里;比如用户帐号及密码配置 文件; |
/lib | 库文件存放地。 |
/media | 可拆卸的媒介挂载点,如 CD-ROMs、移动硬盘、U 盘,系统默认会挂载到这里来。 |
/mnt | 临时挂载文件系统。这个目录一般是用于存放挂载储存设备的挂载目录的 |
/opt | 可选的应用程序包 |
/proc | 操作系统运行时,进程(正在运行中的程序)信息及内核信息(比如 cpu、硬盘分 区、内存信息等)存放在这里。 |
/root | Root用户的工作目录 |
/sbin | 和 bin 类似,是一些可执行文件,不过不是所有用户都需要的,一般是系统管理所 需要使用得到的。 |
/tmp | 系统的临时文件,一般系统重启不会被保存。 |
/usr | 包含了系统用户工具和程序。 |
/srv | 该目录存放一些服务启动之后需要提取的数据 |
如果一个分区没有挂载在目录中就不会被系统接收和识别。Linux下磁盘的分区和目录的关系如下:
- 任何一个分区都必须挂载到某个目录上。
- 目录是逻辑上的区分,分区是物理上的区分
- 磁盘 Linux 分区都必须挂载到目录树中的某个具体的目录上才能进行读写操作。
- 根目录是所有 Linux 的文件和目录所在的地方,需要挂载上一个磁盘分区。
挂载外设
挂载外设的步骤
- 插入外设,输入命令
fdisk -l
来找到外部设备如:/dev/sdb1
- 在挂载目录/mnt下 创建挂载的目标目录如:/mnt/usb
- 挂载命令:
mount /dev/sdb1 /mnt/usb/
- 卸载:
umount /mnt/usb/
值得注意的是命名中卸载目标目录 而不是设备。
<a name = "2">Linux终端常用命令</a>
ls
pwd
cd
touch
mkdir
rm
cp
mv
find
cat
less
head
tail
useradd gou
passwd you
su
ifconfig
ping
setup
<a name = "2">VIM教学</a>
vimtutor 中有教学每天坚持两遍就好。
使用中文版vimtutor -g zh
关于vim的配置高亮缩进等
在用户当前的家目录中,输入 vim ~/.vimrc 该文件是一个隐藏文件,如果没有则
创建它,该文件中保存一些,vim 的常用配置。
set nu //代码显示行号
syntax on //关键词高亮显示
set cindent //c语法自动缩进
set autoindent //新行自动缩进
set shiftwidth=4 //缩进宽度4
set tabstop=4 //tab键宽度4
set softtabstop=4 //制表符宽度4
day2总结
<a name = "2">流程图设计推荐</a>
流程图设计的网站:www.processon.com
<a name = "2">标识符的命名规则</a>
- 只能由字母、数字、下划线、组成。
- 不能以数字开头。
- 不能使用关键字。
- (记忆:如果数开头就会输(失败))
- 注:main不是关键字。
- 命名区分大小写。gou 与 GOU是不同。
其他法则:1.驼峰法则 sumOfTwoNumber 2.下滑线 sum_of_two_number
<a name = "2">补码</a>
example1:1字节下2的原码 反码 补码是多少?
正负不变的原则
码型 | 表示值 |
---|---|
原码 | 0000 0010 |
反码 | 0111 1101 |
补码 | 0111 1110 |
example2:以下代码是打印32 ~ 127的ASCII码。如果去掉unsiged就会死循环。
int main(void){
unsigned char ch;
for (ch = 32; ch < 128; ch++) {
printf("%3d = %c\n", ch, ch);
}
}
原因:当改为char时候。变为有符号数, 补码会用来表示符号。ch = 127 127(补码形式0111 1111) < 128成立 打印
ch++ ch = 128(补码形式1000 0000 原码:-1000 0000 = - 128) 这样就死循环了。比较时任是比较原码值的大小。变化的时候正负不变 符号位设置为0;补码是模的概念, 而模是一个循环。满了就会回到起点。
补码 | 表示值 |
---|---|
1111 1111 | -1 |
---- | ---- |
1000 0001 | -127 |
1000 0000 | -128 |
0111 1111 | 127 |
0111 1110 | 126 |
---- | ---- |
0000 0010 | 2 |
0000 0001 | 1 |
0000 0000 | 0 |
<a name = "3">基本数据类型</a>
难点分析:浮点数的表示方法
比如32位要存储0.5这个数字。
0.5 = 1 * 2 -1
- 符号位 0
- 阶码 = 127 + (-1) = 126 即:0111 1110
- 尾数 = 只存储1.0后的部分,因为个位数一定是1.所以存储0。 即:0000000 00000000 00000000
- 故总的表示为:0 0111 1110 0000000 00000000 00000000
同理125.5的表示
125二进制表示形式为1111101,小数部分表示为二进制为 1,则125.5二进制表示为1111101.1,由于规定尾数的整数部分恒为1,则表示为1.1111011*26,阶码为6,加上127为133,则表示为10000101,而对于尾数将整数部分1去掉,为1111011,在其后面补0使其位数达到23位,则为11110110000000000000000
则其二进制表示形式为 0 10000101 11110110000000000000000,则在内存中存放方式为:
01000010 高地址
11111011
00000000
00000000 低地址
由上分析可知float型数据最大表示范围为
- 1111111 11111111 11111111 x 2 127= 3.4 x 1038
难点分析:浮点数的精度是一个范围!!???
比如要表示0.1 到0.9 九个小数。精度到0.1至少需要9个开关,也就是9bit,即4个字节至少。所以4个字节的精度是3~4位。有可能精确到4位表示一些数,但是不能全部全表示所以不能全达到4位。
所以在23个尾数字节的存储情况下, 可以表示 223 种可能。
如果要达到精确到0.00 0001 大概需要99 9999种可能。223 = 838 8608 > 99 9999 所以足够精确到精确到 6 位。但是如果精确到 7 位就必须 999 9999种可能。然而开关 838 8608不够。所以精度是6~7位。
<a name = "转义字符">转义字符</a>
ASCII 0~127的范围
常见转义字符的
转义字符 | 意义 |
---|---|
\n | 换行 |
\r | 回车移到本行开头 |
\t | 水平制表,调到下一个TAB缩进处 |
\|\ | |
' | ' |
\" | " |
%% | % |
比如:
printf("I like \"football\"\n");
printf("%d%%\n", 95);
输出:
I like "football"
95%