程序用C语言编写。
我们确定变量i和f中包含的值具有相同的位序列。现在转到程序的第63行。 我创建类型为unsigned int的变量ui和uf。 我分配给ui的值i转换为unsigned int。 我将f的值赋给uf,该值转换为unsigned int。 我的问题是:为什么当我打印ui和uf的内容时会得到两个不同的值? (ui = 3281948672 uf = 4294966979)。考虑到i和f中包含的值具有相同的二进制表示形式,因此ui和uf的打印不应该提供相同的值吗?那是3281948672。 这很奇怪,因为当我打印* ipi和* ipf的内容时,它们指向i和f,它们给出的结果相同(* ipi = 3281948672 * ipf = 3281948672)。帮助我!
这是源代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
float f = -317.125;
int i = -1013018624;
printf("Value : %f %d\n",f,i);
printf("Indexs: %p %p\n",&f,&i);
if(i == f)
{
printf("equals\n");
}
else
{
printf("Differents\n");
}
float* pf = &f;
int* pi = &i;
printf("float *pt %p, int *pi %p\n",pf,pi);
if(*pi == *pf)
{
printf("*pt and *pi equals\n");
}
else
{
printf("differents\n");
}
void* vpf = &f;
void* vpi = &i;
unsigned int *ipf = (unsigned int *)vpf;
unsigned int *ipi = (unsigned int *)vpi;
if(*ipf == *ipi)
{
printf("*ipf e *ipi are equals why the bits contained in the pointed memory areas are the same\n");
}
else
{
printf("differents\n");
}
printf("*ipi = %u\n",*ipi);
printf("*ipf = %u\n",*ipf);
printf("*ipi in hex = %08X\n",*ipi);
printf("*ipf in hex = %08X\n\n\n",*ipf);
unsigned int ui,uf;
ui = (unsigned int)i;
uf = (unsigned int)f;
printf("ui = %u\n",ui);
printf("uf = %u",uf);
return 0;
}
答案 0 :(得分:1)
在C语言中,从浮点类型到整数类型的转换不是 逐位转换。因此,即使i
和f
逐位相同,它们也不会以相同的方式转换为unsigned int
。您看到的是预期的行为。