目录
一、数据类型介绍
1.数据类型介绍
char //字符数据类型
short //短整型
int //整型
long //长整型
long long //更长的整型
float //单精度浮点数
double //双精度浮点数
2.类型的基本归类
2.1整型家族
char unsigned char (无符号)
signed char (有符号)
short unsigned short [int]
signed short [int]
int unsigned int
signed int
long unsigned long [int]
signed long [int]
2.2浮点数家族
float
double
2.3构造家族
> 数组类型
> 结构体类型 struct
> 枚举类型 enum
> 联合类型 union
2.4指针家族
int *pi;
char *pc;
float *pf;
void *pv;
2.5空家族
void表示空类型(无类型)
通常用于函数的返回类型、函数的参数、指针类型
二、整形在内存中的存储:原码、反码、补码
三、大小端字节序介绍及判断
变量在内存中的存储
从这里我们看出上变量在内存中是以补码的形式存储的,但是顺序却跟我们想的不太一样,这就是我接下来要讲的大小端存储。
大小端存储的概念
大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;
小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。
如何判断当前机器的是大端还是小端存储?
取出a的地址将其强制类型转化为char*类型后再解引用得到的就是a的第一个字节,若结果是1则为小端存储,若是0,则是大端存储。
练习:
int main()
{
char a[1000];
int i;
for(i=0; i<1000; i++)
{
a[i] = -1-i;
}
printf("%d",strlen(a)); //255
return 0;
}
所以a数组存储的内容为-1,-2,-3……-127,-128,127……2,1,0,-1,-2,-3……
又因为'\0'的ASCII码值为0,所以strlen计算范围只有-1--1,中间字符的个数共有255。
四、浮点型在内存中的存储解析
常见的浮点数:
3.14159 1E10 浮点数家族包括: float、double、long double 类型。 浮点数表示的范围:float.h中定义
浮点数存储的例子:
#include<stdio.h>
int main()
{
int n = 9;
float* pFloat = (float*)&n;
printf("n的值为:%d\n", n);
printf("*pFloat的值为:%f\n", *pFloat);
*pFloat = 9.0;
printf("num的值为:%d\n", n);
printf("*pFloat的值为:%f\n", *pFloat);
return 0;
}
我们从中可以看到虽然num和*pFloat在内存中是同一个数,但在内存中存储的数据差距十分大,这是因为整数和浮点数在内存中存储的方式不同。
根据国际标准IEEE754,任意一个二进制浮点数V可以表示成下面的形式:··· (-1)^S * M * 2^E··· (-1)^s表示符号位,当 s=0 , V 为正数;当 s=1 , V 为负数。··· M表示有效数字,大于等于 1 ,小于 2 。··· 2^E表示指数位
五、浮点数从内存中取出
1.S直接取出
2.E、M取出分为3种情况
(1)E不全为0或者不全为1:此时E=E-127或者E=E-1023,再将有效数字M前加上第一位1。
(2)E全为0:E=1-127或者E=1-1023;M此时不用加上1,而是还原成0.xxxxxx的小数。此时取出的数无限接近±0.
(3)E全为1:取出的浮点数为正无穷或者负无穷大。
六、总结
以上就是数据在内存中存储的全部内容,希望对大家有所帮助。