本小节知识点
1.字节和地址
-
为了更好地理解变量在内存中的存储细节,先来认识一下内存中的“字节”和“地址”。
-
内存以“字节为单位”
2.变量的存储
-
一个变量所占用的存储空间,不仅跟变量类型有关,而且还跟编译器环境有关系。同一种类型的变量,在不同编译器环境下所占用的存储空间又是不一样的
-
所占用字节数跟类型有关,也跟编译器环境有关
-
内存由大到小寻址
-
变量存储单元的第一个字节的地址就是该变量的地址
-
任何变量在内存中都是以二进制的形式存储。一个负数的二进制形式,其实就是对它的正数的二进制形式进行取反后再+1。(取反的意思就是0变1、1变0)
-
类型 | 16位编译器 | 32位编译器 | 64位编译器 |
---|---|---|---|
char | 1 | 1 | 1 |
int | 2 | 4 | 4 |
float | 4 | 4 | 4 |
double | 8 | 8 | 8 |
short | 2 | 2 | 2 |
long | 4 | 4 | 8 |
long long | 8 | 8 | 8 |
void* | 2 | 4 | 8 |
3.取值范围
-
不同数据类型所占的存储空间是不一样的,字节长度不一样,包含的二进制位数就不一样,能表示的数据范围也就不一样
-
如果赋值的时候超出了变量的取值范围,那么将损失精度,得到“垃圾数据”(“垃圾数据”就是指并非我们想要的数据)
关键字 | 所占字节数 | 表示范围 |
---|---|---|
int | 4 | -2(31) ~ 2(31)-1 |
signed short int | 2 | -2(15) ~ 2(15)-1 |
signed long int | 4 | -2(31) ~ 2(31)-1 |
unsigned int | 4 | 0 ~ 2(32)-1 |
unsigned short int | 2 | 0 ~ 2(16)-1 |
unsigned long int | 4 | 0 ~ 2(32)-1 |
float | 4 | 绝对值E-37 ~ E+38 |
double | 8 | 绝对值E-307 ~ E+308 |