332 字
2 分钟
关于我的计算机中的发现——小端存储
2024-02-15

最近尝试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)𝐷这样一个十进制数只占一个字节,显然少了三个字节,而这少的三个字节,我们通过内存视图容易发现,是由(41)𝐻这个十六进制数之后的AF CF FF共同组成。但是如果这个int数是41AFCFFF𝐻的话,那么无论是int16还是int32都对不上,所以只能是小端序的存储方式,也即FFCFAF41𝐻,而该十六进制以补码形式存储,最高一位做符号位,转换成十进制数也就是-3166399,这与*ccptr结果一致。

关于我的计算机中的发现——小端存储
https://laplace825.github.io/posts/cpp/findmycomputer/
作者
Laplace
发布于
2024-02-15
许可协议
CC BY-NC-SA 4.0