2021.09.29 CS:APP 2.1.3

现代计算机大多以一个字节(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

上一篇:38. 外观数列(递归)


下一篇:C++中的左值和右值