C语言(计算机对字节、字等的储存机制)

C语言(计算机对字节、字等的储存机制)_第1张图片
系统存储字节为一个一个字节的存储;一般分为大端和小端的两种字节顺序,小端:低数据位存储在低地址位,大端:高数据位存储在低地址为;
C语言(计算机对字节、字等的储存机制)_第2张图片
上面这段代码和执行结果是我在Ubuntu上所编写并编译执行的,我的平台字节序为小端方式;我首先定义了一个long类型的数组,数组内有四个数据,因为我的系统是64的,long类型数据在我的系统上是8个字节,不同系统不同。所以此时这个数组占32个字节的内存,第一个输出和第二个输出也证实了我的结论;a是这个数组的首地址&a是这个数组的整体地址,&a+1是&a偏移(&a)单位地址,这里单位为32字节,第二个输出数据减第一个数据结果的十进制数就是32,怎么算的我就不讲解了;
C语言(计算机对字节、字等的储存机制)_第3张图片
小端存储方式个人理解是上面的形式下的long a[4] = {1,2,3,4},后面的3,4我没有画,相信也都能知道;现在来解释下第三个输出,(long *)((long)a+3)这个是先把地址7ffdb3bbceb0转化为long类型的16进制数,然后加3等于7ffdb3bbcfc0,再把这个long形整数强制转化为long *,这会就代表一个16进制地址了,意思就是地址a偏移3个字节后的地址;下面的图就是此时的地址位置C语言(计算机对字节、字等的储存机制)_第4张图片
此时地址内存储为0000000000020000,此时的数据排列就是相反的0000020000000000,输出后前面高位的0无意义,系统不会显示,所以输出20000000000;

(如有不对请指出)

你可能感兴趣的:(c语言)