变量内存分析
内存模型
-内存模型是线性的(有序的)
-对于32机而言,最大的内存地址是2^32次方bit(4294967296)(4GB)
-对于64机而言,最大的内存地址是2^64次方(171亿GB)
内存地址 | 内存 |
FFFF FFFF | |
FFFF FFFE | |
FFFF FFFD | |
FFFF FFFC | |
FFFF FFFB | |
FFFF FFFA | |
.......... | |
.............. | |
0000 0002 | |
0000 0001 | |
0000 0000 |
1.内存是一个线性有序的模型
2.内存地址是从大到小的
3.由于内存地址是从大到小的,所以开辟存储空间的时候,也会从大到小的开辟
模拟内存
4.变量的地址就是自己占用内存最小的那个字节地址
5.由于分配存储空间会从地址大的开始分配,所以存储数据也会从内存地址大的开始存储
变量名称 | 地址 | 内存 |
0FFFF9 | 0000 0000 | |
0FFFF8 | 0000 0000 | |
0FFFF7 | 0000 0000 | |
NUM | 0FFFF6 | 0000 1001 |
0FFFF5 | 0000 0000 | |
0FFFF4 | 0000 0000 | |
0FFFF3 | 0000 0000 | |
VALUE | 0FFFF2 | 0000 0110 |
0FFFF1 | 1B |
CPU读写内存
%p的作用就是打印地址
说明分配地址从内存大的开始分配
char类型的存储细节
1.由于计算机只能识别0和1,所以不能直接将字符存储到内存中
2.为了解决这个问题,老美就制定了一张ASCII的表,这张表中规定了每个字符对应的整数
3.所以以后再存储字符的时候,本质都是存储的这个字符对应的ASCII码值
变量名称 | 地址 | 内存 |
ch | 0FFFF9 | 0110 0001 |
0FFFF8 | ||
0FFFF7 | ||
0FFFF6 | ||
0FFFF5 | ||
0FFFF4 | ||
0FFFF3 |
需求:要求将小写字母转换为大写字母
1.定义一个变量保存一个小写字母
2.将小写字母转化为大写字母
char res=ch-32;
还有一种十分巧妙的方法
类型说明符-说明长度
1.数据类型的作用
告诉操作系统需要分配多大的存储空间
char 1个字节存储空间 00000000 -2(7)~2(7)-1
int 4个字节存储空间 -2(31)~2(31)-1
2.类型说明符
在C语言中有两种类型说明符,一种是用于说明长度的,一种是用于说明符号位的。
3.说明长度的类型说明符
对遍历的存储空间进行扩容或缩容,说明长度的类型说明符可以用于优化存储空间
short 2个字节存储空间 -2(15)~2(15)
long 在32位编译器下占用4个字节,在64位编译器下占用8个字节
long long 8个字节存储空间 -2(63)~ 2(63)-1
4.如何输出被类型说明符说明的数据
short --> %hi %hd
long --> %li %ld
long long --> %lli %lld
short用来缩小容量
long用来扩大容量
5.注意点:
由于说明长度的类型说明符一般都是用于int类型,所以在使用的时候int可以省略
类型说明符---说明符号位
用于明确地告诉操作系统可以保存哪些数据()
unsigned //告诉操作系统可以存储正数/零,但是不能存取负数 %u来取值
signed //告诉操作系统可以存储正数/负数/零
7.默认情况下变量就是signed,所以一般情况下signed我们不用写
如果一个变量被unsigned修饰了