2012-01-29 62 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會告訴您按照何種順序讀取它們。這與正好與整數值相同。