数据存储 IEEE754 with little and big endian

Data storage IEEE754 with little and big endian

我目前正在学习一些 IT 知识,并且有一个可能非常简单的问题.. 我的任务是计算 4 个字节的内存转储的十进制输出,存储为小端 (IEEE754)。我的书只解释了当数据存储时如何处理这种计算:

|--------- Byte 1 --------|--------- Byte 2 -------------|--------- Byte 3 ------------|--------- Byte 4 ------|
|sign e7 e6 e5 e4 e3 e2 e1|e0 m22 m21 m20 m19 m18 m17 m16|m15 m14 m13 m12 m11 m10 m9 m8|m7 m6 m5 m4 m3 m2 m1 m0|

我没有任何关于 little/big endian 的有用描述...... 我花了很多时间想通上面的 table 必须存储为 big endian。 little endian 的描述说第一个字节在第 4 个字节的位置,第二个在位置 3,第三个在位置 2,第四个在第一个地址。

Example:
Big endian: AB CD EF 01
Little endian: 01 EF CD AB

我说的对吗?

我现在有点困惑,因为这一定意味着例如数字符号位是 AB 字节的第一个,不是吗? 有人可以确认或解释以下 table 是否正确“转移”到小端:

|--------- Byte 1 ------|--------- Byte 2 ------------|--------- Byte 3 -------------|--------- Byte 4 --------|
|m7 m6 m5 m4 m3 m2 m1 m0|m15 m14 m13 m12 m11 m10 m9 m8|e0 m22 m21 m20 m19 m18 m17 m16|sign e7 e6 e5 e4 e3 e2 e1|

非常感谢!!!

您的解释完全正确。可以通过简单的程序轻松验证。

#include <stdio.h>
#include <string.h>

int main() {

  float f=-123456.75f;
  int i;
  unsigned char c[4];

  memcpy(c,&f,4);
  memcpy(&i,&f,4);
  printf("decimal representation of f: %f\n",f);
  printf("hex representation of f: %a\n",f);
  printf("hex value of integer with the same bytes as f:  %x\n",i);
  printf("sucessive bytes in f (0:3): %.2x %.2x %.2x %.2x\n",c[0],c[1],c[2],c[3]);
  /* gives
decimal representation of f: -123456.750000
hex representation of f: -0x1.e240cp+16
hex value of integer with the same bytes as f:  c7f12060
sucessive bytes in f (0:3): 60 20 f1 c7
  */
}

I’m slightly confused now, because this must mean that e.g. the bit for the sign of the number is the first one of the AB Byte, isn’t it?

没有理由混淆。在内存中,符号位确实是小端架构上浮点表示的第四个字节的 MSB。
但是字节序只涉及字节在内存中如何存储。无论字节顺序如何,一旦加载到寄存器中并由程序操作,行为将是相同的。
我们习惯于从左到右书写,并从最高位开始数字。但只要保留数学属性,其他表示方案也完全有效。
如果对你有帮助,就把最低有效位的字节写在左边(但在计算机上左右没有意义)。

|--------- Byte 1 ------|--------- Byte 2 ------------|--------- Byte 3 -------------|--------- Byte 4 --------|
|m0 m1 m2 m3 m4 m5 m6 m7|m8 m0 m10 m11 m12 m13 m14 m15|m16 m17 m18 m19 m20 m21 m22 e0|e1 e2 e3 e4 e5 e6 e7 sign|