Jon*_*son 3 architecture memory endianness
当我们说一个特定的体系结构是小端字节序或大端字节序时,我们指的是数字意义在内存中是从左到右还是从右到左存储。我的问题是:这种排序是指字节中位或字节的排序方式,还是内存中字节的排序方式?
例如,考虑数字6000=1770h=0001011101110000b。如果字节中的位和内存中的字节都是小尾数,则这将存储为
00001110 11101000 = 0E E8,
如果字节中的位是大端字节序,但内存中的字节是小端字节序,则这将存储为(就其价值而言,这恰好是 Visual Studio 似乎告诉我内存是在 x64 体系结构中组织的方式)
01110000 00010111 = 70 17,
Run Code Online (Sandbox Code Playgroud)
如果位是小端字节序,但字节是大端字节序,则这将存储为
11101000 00001110 = 0E E8,
Run Code Online (Sandbox Code Playgroud)
最后,如果位是大尾数,但字节是小尾数,则这将存储为
00010111 01110000 = 17 70
Run Code Online (Sandbox Code Playgroud)
(希望我做对了。)
那么,术语“little-endian”和“big-endian”实际上指的是什么?这些术语是指字节中位的顺序,还是内存中字节的顺序,或者两者兼而有之?此外,如果 VS 告诉我,例如,7C是“在”给定的特定字节中,那么它们是否意味着计算机内存中组成该字节的位实际上是0111 1100,或者它们只是意味着存储在该字节中的值是7Ch=124,但或实际上可能不会表示为7c=01111100取决于底层架构是否恰好是小端?
字节中位的顺序是不可见的。由于您无法对各个位进行寻址,因此两种情况之间没有区别。但是,您可以对单个字节进行寻址,因此它确实会有所不同。
如果我们在字节寻址内存中表示 6000,则高字节为十进制 23(6000 除以 256),低字节为十进制 112(6000 mod 256)。我们可以将其存储为 23,112 或 112,23。没有其他选择。只有字节顺序是一个开放的选择,这就是字节序所指的。