Week 1 学习总结
关于每日一练
- 将源⽂件变成可执⾏⽂件称为编译过程,请问对编译效率影响最⼤的是哪个步骤?
-
原码、反码、补码、真值
1)原码
数字在以二进制表现的形式,其中正数的最高位为0,负数的最高位为1,其余位数表示该数字的绝对值2)反码
正数的反码是它的原码本身
负数的反码为保留其符号位,其余位取反3)补码
在计算机系统中,数值一律用补码来表示和存储,使用补码,可以将符号位和数值域统一处理,同时,加法和减法也可以统一处理
正数的补码是它的原码本身
负数的补码是其反码加14)真值
真值是原码除去符号位的剩余位数表示的值,即数字的“绝对值” -
大小端问题
小端:高位字节排在内存的高地址端,低位字节排在内存的低地址端
大端:高位字节排在内存的低地址端,低位字节排在内存的高地址端对于小端,强制转换类型时只需要在右边补全相应位数的0即可
对于大端,比较容易判断正负,符号位的判定固定为第一个字节
变量的作用域&生命周期
1. 变量的作用域:与编译阶段有关,如果超出作用域,就会导致编译错误
变量的作用域范围为:变量的定义或者扩展定义,直到域结束为止。扩展定义域一般使用extern关键字在需要的位置进行扩展
- 全局变量:基于全文件的作用域,需要用到文件编译
- 静态全局变量:基于本文件的作用域 只和这个文件相关,其他文件无法使用
- 函数内的局部变量:只能够在本函数当中使用,其他函数当中无法使用
- 基于域的局部变量:只能够在域当中使用,域外部无法使用
使用extern只能扩充作用域,但是局部变量在对应的局部域当中没有真正定义,导致链接的过程当中找不到该变量,出现链接错误
2. 变量的生命周期:从变量的定义开始,到变量空间的释放结束。如果超过生命周期,就会导致运行错误
-
对于非静态局部变量,一般我们称其定义的位置在栈区,当对应的域结束时,系统对这块空间进行释放
-
可以手动申请存放到堆区,需要手动进行释放
-
对于全局变量,其自带静态特性,可以通过static关键字声明变量存放在静态区
static 关键字
-
针对于生命周期,使其声明的变量存放到静态区,可以理解为给变量续命
-
针对于作用域,其表示限定作用域,比如在某些.c文件中定义的函数,添加static限定该函数只能适用于当前的.c文件