目录
一、数据类型的介绍
基于所学知识,我们已经知道了基本的内置类型以及占存储空间的大小:
char //字符数据类型 1
short //短整型 2
int //整型 4
long //长整型 4/8
long long //更长的整型 8
float //单精度浮点型 4
double //双精度浮点型 8
类型的意义:
1.使用这个内存开辟内存空间的大小(大小决定了使用的范围)
2.如何看待内存空间的视角
1.类型的基本归类
整型
char
unsigned char
signed char
short
unsigned shout
signed short
int
unsigned int
signed int
long
unsigned long
signed long
long long
unsigned long long
signed long long
字符的本质是ASCII值,故划为整型
浮点数家族
float//精度较低,存储的数据范围较小
double//精度较高,存储的数据范围大
构造类型
//数组类型
//结构体类型 struct
//枚举类型 enum
//联合类型 union
指针类型
int* pi;
char* pc;
float* pf;
void* pv;//泛型指针
空类型:void表示空类型,通常用于函数的返回类型、函数的参数、指针类型(泛型指针)。
二、整型在内存中的存储
1、原码、反码、补码
原码,反码和补码都是整数的二进制表示方法,这三种方法均有符号位和数值位两部分,符号为用“0”表示“正”,用“1”表示“负”,而数值位中正数的原、反、补相同,负数的三种表示方法:
反码是原码的符号位不变,其他位按位取反,补码是反码+1。对于整型数据来说,数据的存放中其实存放的是补码。(原因:使用补码,可以将符号位和数值域统一处理,同时加法和减法也可以统一处理,CPU中只有加法器,此外,运算过程中是相同的,不需要额外的硬件电路。
在内存中的存储:
从图片中我们可以看到a和b分别存储的是补码,但在顺序上与我们计算得到的编码又有些不同。
char的取值范围是-128~127、unsigned char的取值范围是0~255;
short的取值范围是-32768~32767、unsigned char的取值范围是0~65535
2、大小端介绍
(1)什么是大端小端
大端存储模式:是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中
小端存储模式:是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中
(如果内存从左到右为低地址到高地址,则大端是顺序存储,小端是倒序存储)
(2)为什么有大端和小端
在计算机系统中是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了8bit的char之外,还有16bit的short,32bit的long,另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,则必然存在着一个如何将多个字节安排的问题。
//判断当前机器大端小端的方法
int check_sys()
{
int a = 1;
return *(char*)&a;
}
int main()
{
int ret = check_sys();
if (ret == 1)
printf("小端\n");
else
printf("大端\n");
return 0;
}
三、浮点数在内存中的存储
1、浮点数的存储规则
根据国际标准IEEE754,任意一个二进制浮点数v可以表示成下面的形式:(-1)^S * M * 2^E
其中(-1)^S表示符号位,当S=0,v为正数;当S=1,v为负数;M表示有效数字,大于等于1,小于2;2^E表示指数位
这里举个🌰:
十进制的5.0,写成二进制是101.0,相当于1.01*2^2。按照上面的形式,则S=0,M=1.010,E=2。
IEEE 754规定:
对于32位的浮点数,最高的1位是符号位S,接着的8位是指数E,剩下的23位是有效数字M。
对于64位的浮点数,最高的1位是符号位S,接着的11位是指数E,剩下的52位是有效数字M。