关于我的计算机中的发现——小端存储

最近尝试reinterpret_cast时发现验证了一些计算机组成原理中内存相关的存储方式,不过也只是一些小玩意罢了。

C++代码如下

int main()
{
    char cc = 'A';
    int *ccptr = reinterpret_cast<int *>(&cc);
    std::cout << cc << '\n';
    std::cout << *ccptr << '\n';
}

在调试查看内存时,验证了小端序的存储方式,可看下图

这里变量cc的地址处可以看见存储的字符是A,但是当我们打印*ccptr时得到的值却是 -3166399,从我之前的印象中,我以为这里应该打印出65才对,但是其实仔细一想,int*指向的应该是一个 32 位 4 字节的数字,而char类型只有一个字节,也就是说,$(65)_D$这样一个十进制数只占一个字节,显然少了三个字节,而这少的三个字节,我们通过内存视图容易发现,是由$(41)_H$这个十六进制数之后的AF CF FF共同组成。但是如果这个int数是$(41AFCFFF)_H$的话,那么无论是int16还是int32都对不上,所以只能是小端序的存储方式,也即$(FFCFAF41)_H$,而该十六进制以补码形式存储,最高一位做符号位,转换成十进制数也就是-3166399,这与*ccptr结果一致。