现代计算机大多以一个字节(Byte)作为基本单元,而大多数数据或者指令都有多个字节,对于其取址得到的结果为:其所使用字节中最小的地址
例如 int x的地址为0x100,那么x的四个字节将被储存在0x100,0x101,0x102,0x103
那么一个对象的所有位数是如何储存在其中的?
考虑一个w位的整数,其位表示为 Xw-1,Xw-2,......X1,X0,其中Xw-1为最高有效位,X0为最低有效位,有两种通用的规则。(对于十六进制,一个有效位为两个数字,其为一个整体)
大端法(big endian):最高有效位在最小的地址,从前往后依序存储
小端法(small endian):最低有效位在最小的地址,从前往后依序存储
假设 int x 地址为0x100,其十六进制值为0x01234567
则按照大端法:0x100 - 01 0x101 - 23 0x102 - 45 0x103 - 67
按照小端法: 0x100 - 67 0x101 - 45 0x102 - 23 0x103 - 01
C语言中数据类型的大小(Byte):
有符号: [signed] char 1(32位) 1(64位) short 2 2 int 4 4 long 4 8 int32_t 4 4 int64_t 8 8 char* 4 8 float 4 4 double 8 8
无符号: unsigned char 1 1 unsigned short 2 2 unsigned 4 4 unsigned long 4 8 uint_32 4 4 uint_64 8 8