1、目前常用的机器都是32位和64位的,但是有时候会考虑16位机。总结一下在三种位数下常用的数据类型所占的字节大小。
数据类型 | 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 | / |
2、大端存储和小段存储:
大端存储模式:数据的低位保存在内存中的高地址中,数据的高位保存在内存中的低地址中。
小段存储模式:数据的低位保存在内存中的低地址中,数据的高位保存在内存中的高地址中。
以0x12345678
为例:
大端存储方式:
地址: 0x00 0x01 0x02 0x03+-----+-----+-----+-----+
数据: | 12 | 34 | 56 | 78 |+-----+-----+-----+-----+
小端存储方式:
地址: 0x00 0x01 0x02 0x03+-----+-----+-----+-----+
数据: | 78 | 56 | 34 | 12 |+-----+-----+-----+-----+
注:在每个字节中,高位在左,低位在右。
使用C语言判断大端存储还是小端存储:
int main() {int a = 1;char* p = (char*) & a;//char* -- 访问一个字节(第一个地址)if (*p == 1){printf("小端\n");}else{printf("大端\n");}return 0;
}