2012-01-29 25 views
6

Đối với các giá trị số nguyên, nó là khá đơn giản sự khác biệt trong ít đại diện cuối cùng và lớn endian.Sự khác nhau giữa phao nổi lớn và nhỏ là gì?

Nhưng không rõ ràng đối với tôi cách một chiếc phao cuối nhỏ khác với phao lớn cuối cùng.

Và cuối cùng, tôi muốn biết thông tin nào được sử dụng phổ biến hơn.

+11

Các endianness ảnh hưởng đến cách các giá trị được trình bày trong bộ nhớ cho _all_ loại đa byte. Floats không khác với số nguyên 32 bit trong trường hợp này. –

+0

4 byte chỉ được lưu trữ theo thứ tự ngược lại. –

+2

Điều làm tôi bối rối là biểu diễn dấu phẩy động không được chia thành các byte (giống như số nguyên). Ký hiệu là 1 bit, số mũ 8 bit và có nghĩa là 23. Đảo ngược thứ tự sẽ làm cho việc truy cập các giá trị trở nên khó khăn hơn. –

Trả lời

6

Một số nguồn nói rằng IEEE754 nổi luôn được lưu trữ nhỏ nhưng đặc điểm kỹ thuật IEEE754 cho số dấu chấm động đơn giản không bao gồm vấn đề về cuối và có thể thay đổi từ máy này sang máy khác. Đây là mẫu mã cho dấu chấm động/byte mảng chuyển đổi:

#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; 
} 

Đó là đầu ra trên một chút-Ấn Độ máy:

float: 3,141590 byte mảng: D0: F: 49: 40 float: -3.141590 mảng byte: D0: F: 49: C0

Về mặt lý thuyết, trên một máy tính lớn, thứ tự byte sẽ được đảo ngược.

tham khảo: http://betterexplained.com/articles/understanding-big-and-little-endian-byte-order/

+2

Trên máy SPARC: float: 3.141590, mảng byte: 40: 49: F: D0; float: 3.141560, mảng byte: 40: 49: F: 50 – automatthias

+0

Đây chính là cách thực hiện nó! – Owl

11

Tính xác thực chỉ là thuộc tính của các byte tạo thành giá trị được tạo thành từ nhiều byte. Vì một số dấu chấm động chiếm 4 hoặc 8 byte endianness cho bạn biết thứ tự để đọc chúng. Đây là chính xác giống với giá trị số nguyên.

Các vấn đề liên quan