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/
Nguồn
2012-01-29 22:05:47
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. –
4 byte chỉ được lưu trữ theo thứ tự ngược lại. –
Đ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. –