memory - 内存中字节序 : Bits in a Byte vs. 字节

标签 memory architecture endianness

当我们说某个特定架构是小端字节序或大端字节序时,我们指的是数字意义在内存中是从左到右还是从右到左存储。我的问题是:这个排序是指字节中位或字节的排序方式,还是内存中字节的排序方式?

例如,考虑数字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/

相关文章:

Meteor JS - 在不同客户端之间共享集合(如管理门户与消费者门户)

asp.net-mvc - 这称为什么类型的架构?

c++ - C++什么时候分配内存?

memory - 由于 openssl, ARM SIGILL 上的 valgrind

c++ - 使用 OpenGl 在 C++ 中组织公寓建模代码

c - htonl() 与 __builtin_bswap32()

cpu-architecture - 字节序和堆栈增长方向之间的关系

assembly - ARM 汇编 - 转换字节顺序

javascript - Chrome 中的 FileReader 内存泄漏

c - 用户空间虚拟内存地址范围