#include<stdio.h>
union U{
struct{
int x;
int y;
};
float xy;
};
int main(){
union U u;
u.x = 99;
printf("xy %f\n",u.xy); //output " 0 "
return 0;
}
我已經發現它與float如何被存儲和讀取內部有關。有人可以向我解釋嗎?爲什麼我用C union獲得這個輸出?
用'%f'打印並不是很有用;你應該考慮'%g'或'%e'。如果該值非常小,即使它不爲零,也會打印爲「0.000000」。 (例如,小於「0.0000005」的任何值都將打印爲「0.000000」。)您需要在維基百科上閱讀[IEEE 754](https://en.wikipedia.org/wiki/IEEE_754),例如,瞭解如何表示這些值。例如,在運行使用GCC 7.2.0的macOS Sierra 10.12.5的Mac上,使用'printf(「xy%22.16g \ n」,u.xy);'生成'xy 1.387285479681569e-43'。 –
@JonathanLeffler; OP已經初始化了聯盟'u'的未命名結構的成員'x'。然後他使用不同的聯合成員'xy'來讀取內容。有可能它是一個陷阱表示,在這種情況下,代碼的行爲將是不確定的。 – haccks
4字節'float'中正常數字的範圍通常爲10 +3到10 -3,因此來自'float'的值1.387 ... E-43是一個低於正常值的值(儘管在8字節'雙'值)。 –