【发布时间】:2017-06-17 21:55:17
【问题描述】:
我正在尝试使用联合来获取浮点值的位表示,我的代码目前如下:
union ufloat {
float f;
unsigned u;
};
int main( ) {
union ufloat u1;
u1.f = 3.14159f;
printf("u1.u : %f\n", u1.u);
但是,我尝试打印的任何内容都打印为 0.0000000,而不是位(例如 0001 0110 或类似的东西),我的代码有什么问题?
请注意,我希望使用联合来实现这一点。
【问题讨论】:
-
没有
printf格式说明符可以打印出任何值的二进制表示。您需要提取每一位并将其打印出来。 -
您正在调用 未定义的行为 - 将
unsigned传递给printf以对应于%f。 -
您需要使用十六进制格式。
%X用于整数,或者%A用于double(您不能将float传递给printf();它们会自动转换为double)。 -
@BiteBytes 投射浮动而不是重新解释它
-
@BiteBytes:更糟糕的是:你违反了有效类型(又名严格别名)规则!我不明白你为什么坚持要演员!
标签: c floating-point bit-manipulation