2012-01-29 66 views
6

对于整数值,小尾数和大尾数表示的差别非常简单。大和小端浮游物有什么区别?

但是我不清楚小尾数浮动与大尾数浮动有什么不同。

最后,我想知道哪个更常用。

+11

字节序影响值在存储器表示为_all_多字节类型的方式。在这种情况下,浮点数与32位整数没有区别。 – 2012-01-29 20:19:08

+0

这4个字节只是以相反的顺序存储。 – 2012-01-29 20:58:06

+2

让我感到困惑的是浮点表示不是以字节为单位(如整数)。符号是1位,指数8位,有效位数是23.反转顺序只会让访问值变得更难。 – 2012-01-29 21:07:56

回答

6

一些消息来源称IEEE754浮点数总是存储为小端,但浮点数的IEEE754规范根本不包含字节序问题,并且可能因机器而异。 这里是浮点/字节阵列转换的示例代码:

#include <stdio.h> 

int main(int argc, char** argv){ 
    char *a; 
    float f = 3.14159; // number to start with 

    a = (char *)&f; // point a to f's location 

    // print float & byte array as hex 
    printf("float: %f\n", f); 
    printf("byte array: %hhX:%hhX:%hhX:%hhX\n", \ 
    a[0], a[1], a[2], a[3]); 

    // toggle the sign of f -- using the byte array 
    a[3] = ((unsigned int)a[3])^128; 

    //print the numbers again 
    printf("float: %f\n", f); 
    printf("byte array: %hhX:%hhX:%hhX:%hhX\n", \ 
    a[0], a[1], a[2], a[3]); 

    return 0; 
} 

这是一个小印机器上的输出:

浮动:3.141590 字节数组:D0:F:49:40 浮动: -3.141590 字节数组:D0:F:49:C0

理论上,在一个big-endian机器上,字节顺序将颠倒。

参考: http://betterexplained.com/articles/understanding-big-and-little-endian-byte-order/

+2

在SPARC机器上:float:3.141590,字节数组:40:49:F:D0; float:3.141560,字节数组:40:49:F:50 – automatthias 2012-03-29 11:49:09

+0

这正是如何实现它! – Owl 2016-07-29 09:05:46

11

Endianness只是构成由多个字节组成的值的字节的属性。由于浮点数占用4或8字节,所以endianness会告诉您按照何种顺序读取它们。这与正好与整数值相同。