内存布局
程序运行时 |
---|
堆区 使用malloc、calloc、realloc、free动态申请、释放 |
栈区 局部变量、数组、函数形参、函数返回值(>4字节) |
全局区 全局变量、静态变量static 不初始化时,内容为0 |
文字常量区(只读) 字符串常量、符号常量 |
代码区(只读) 二进制代码 |
静态局部变量 作用范围:离他最近的{},不被释放,无法开辟空间,直到进程序结束
静态全局变量、静态函数 作用范围:当前源文件,不可在其他源文件直接使用
全局变量与局部变量同名时,采用就近原则
预处理
#include <> //从系统指定目录查找
#include "" //先从源文件所在目录查找,找不到再到系统指定目录查找
宏只在当前源文件有效 本质是单纯的替换!!!
#undef 宏名 //终止宏定义的作用
带参宏 (宏函数) #define func(a,b) a+b //用空间换时间,函数相反
原、反、补码
正数: | 负数: |
---|---|
原码:数的二进制 | 二进制最高位为符号位,表示正负(1是负) |
反码:数的二进制 | 符号位不变,其它位取反 |
补码:数的二进制 | 反码+1 |
无符号数、正数 :原码=补码=反码
补码的意义是将减法变加法运算
计算机为了扩数据表示的的范围:将 -0 看成 -128
举例:
6 - 10 =-4
6+(-10)=-4
0000 0110
1111 0110
---------
1111 1100 =>补码 1000 0100 =-4
补码的意义在于将减法运算变加法运算,统一了 0 的编码
为了扩大数据的表示范围: -0 在计算机中是-128
char 取值范围是 -128~127