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