【发布时间】:2019-04-07 13:46:44
【问题描述】:
我正在为家庭作业创建一个程序,目标是教我们如何从概念上了解工会的运作方式。我相信我理解这个概念,但我对我的一个输出有困难;十六进制的长双倍。
我假设任何东西在打印时都需要在百分号后加一个大写 L。例如打印一个长双浮点数:
printf("\nLong double: %Lf\n", value.ld);
同样,如果我想以十六进制打印 Long Double 浮点数,我会使用:
printf("\nLong double: %Lx", value.ld);
我教授的输出如下:
Professors Output 长双 22fde0
我的输出如下:
My Output 长双62fe40
Long Double 十六进制的打印值不同。这是一个可能因计算机而异的值还是我的想法有误。
我的代码
#include <stdio.h>
// define union data
union data {
float f;
double d;
long double ld;
}value; //union variable
// begin main function
int main(void){
// get initial user input
printf("Enter data for type float: ");
scanf(" %f", &value.f);
puts("\nBreakdown of the element in the union: ");
printf("Float: %f", value.f);
printf("\nDouble: %f", value.d);
printf("\nLong double: %Lf\n", value.ld);
puts("\nBreakdown in hex: ");
printf("Float: %x", value.f);
printf("\nDouble: %x", value.d);
printf("\nLong double: %Lx", value.ld);
// get user input
printf("\n\nEnter data for type double: ");
scanf(" %lf", &value.d);
puts("\nBreakdown of the element in the union: ");
printf("Float: %f", value.f);
printf("\nDouble: %f", value.d);
printf("\nLong double: %Lf\n", value.ld);
puts("\nBreakdown in hex: ");
printf("Float: %x", value.f);
printf("\nDouble: %x", value.d);
printf("\nLong double: %Lx", value.ld);
// get user input
printf("\n\nEnter data for type long double: ");
scanf(" %lf", &value.ld);
puts("\nBreakdown of the element in the union: ");
printf("Float: %f", value.f);
printf("\nDouble: %f", value.d);
printf("\nLong double: %Lf\n", value.ld);
puts("\nBreakdown in hex: ");
printf("Float: %x", value.f);
printf("\nDouble: %x", value.d);
printf("\nLong double: %Lx", value.ld);
return 0;
} // end main function
【问题讨论】:
-
你真的认为联合可以转换对象表示吗?在您的情况下,您似乎希望设置
union data的浮动对象会神奇地为您提供以double或long double格式表示的相同值? -
@Frankie_C 不相信它应该是一样的,这就是这个任务的重点。我们最后存储到联合中的任何值都是其中保存的值。
-
“我们最后存储到联合中的值就是其中保存的值”这是正确的。那么分配一个浮点数并转储长双精度的十六进制内容应该是什么意思?从浮点初始化值打印双精度或长双精度也是无稽之谈...
-
@Frankie_C 表明输出对于我们刚刚扫描的内容以外的任何内容都不正确。您是说我们的输出不同是因为值一开始就不好吗?跨度>
-
@Frankie_C 谢谢,我想我明白了。感谢您的帮助
标签: c