【发布时间】:2014-12-09 15:47:31
【问题描述】:
你好,我有一个小端和大端的小问题,我知道这个问题已经问过 n 次了,但我无法弄清楚以下几点
让我们将 int i=10 以二进制形式存储为 00000000 00000000 00000000 00001010 在堆栈部分,如下所示:-
00000000 |00000000 |00000000 |00001010 // In case of little endian
MSB-------------------------------------------LSB
大端序
00001010 |00000000 |00000000 |00000000 // In case of in big endian
MSB-------------------------------------------LSB
在这个小端和大端都会给出相同的输出 10 ?
那么小端和大端都有什么用呢?
在我的面试中,我被要求实现可移植到所有大小系统的代码。我回复说:
如果 int i=10 int i=10 in little endian 然后在 big endian 中它也是 10 作为输出,编译器会自行处理
这个答案正确吗?
【问题讨论】:
-
我很确定你只是切换字节,而不是位顺序。
-
只切换字节,不切换位!
-
“我被要求实现对所有系统都可移植的代码......” 特别是哪种代码?通过网络发送一些数字,或序列化到文件?任何其他情况通常不需要关心字节序。
-
@StuartLC 能不能给个粗略的图表?
-
您似乎将 MSB(最高有效字节)与最高内存地址混淆了。在您的两个示例中,该数字都将存储在 LSB(最低有效字节)中。然而,在小端中,LSB 在内存中会更低。
标签: c++ c memory-management endianness