数据类型
16位操作系统(byte)
32位操作系统(byte)
64位操作系统(byte)
取值范围
char
1
1
1
-128 ~ 127
unsigned char
1
1
1
0 ~ 255
short int / short
2
2
2
-32768~32767
unsigned short
2
2
2
0 ~ 65535
int
2
4
4
-2147483648~2157483647
unsigned int
2
4
4
0~4294967295
long int / long
4
4
8
-2147483648~2147483647
unsigned long
4
4
8
0~42294967295
long long int / long long
8
8
8
-9223372036854775808~9223372036854775807
double
8
8
8
1.7E+10的负308次⽅~1.7E+10的正308次⽅
float
4
4
4
3.4E+10的负38次⽅~3.4E+10的38次⽅
long double
10/12
10/16
有效位10字节。32位为了对齐实际分配12字节;64位分配16字节
指针
2
4
8
/
总结:常用的32位操作系统和64位操作系统对比:除了 * 与long随操作系统子长变化而变化外,其他的都固定不变:bool 1个字节 、char 1个字节、 int 4个字节、float 4个字节 、doubl 8个字节、long long 8个字节
扩展1:8bit = 1Byte (字节,即Byte,是由八个位组成的一个单元,也就是8个bit组成1个Byte) 、1024Byte = 1KB、1024KB = 1MB、1024MB = 1GB、1024GB = 1TB
示例1:
uint32_t* pRead = NULL; // 这是 uint32_t 类型的一个指针,它本身的大小是4字节或8字节指向一个内存地址(这个地址一般用16进制来表示)。
pRead = (uint32_t*)malloc(16); // 这是申请16个uint32_t的空间,并返回首地址。当 pRead += 5 时,表示它往后移 5 个 uint32_t 的距离,地址往后偏移 5*4 ,也就是在原地址(16进制)的基础上加上十进制的 5*4。如果使用 memcpy(pRead, pData, Data_Size * sizeof(uint32_t)) 这里复制的字节大小需要自己计算。
short* ts = NULL; // 这是 short 类型的一个指针,它本身的大小是4字节或8字节指向一个内存地址(这个地址一般用16进制来表示)。
short* ts = (short*)malloc(16); // 这是申请16个short的空间,并返回首地址。当 pRead += 5 时,表示它往后移 5 个 short 的距离,地址往后偏移 5*2 ,也就是在原地址(16进制)的基础上加上十进制的 5*2。如果使用 memcpy(pRead, pData, Data_Size * sizeof(short)) 这里复制的字节大小需要自己计算。
