指针之间的类型转换.打印错误



程序是用C语言编写的。

我们确定包含在变量i和f中的值具有相同的比特序列。现在转到程序的第63行。我创建了类型为unsigned int的变量ui和uf。我将I转换为无符号int的值赋给ui。我将f的值赋给uf,该值已转换为无符号int。我的问题是:为什么当我打印ui和uf的内容时,我会得到两个不同的值?(ui=3281948672uf=4294966979(。考虑到i和f中包含的值具有相同的二进制表示,ui和uf的打印不应该给我相同的值吗?这是3281948672。这很奇怪,因为当我打印指向I和f的*ipi和*ipf的内容时,它们会给我相同的结果(*ipi=3281948672*ipf=3281948672(。帮帮我!

这是源代码:

#include <stdio.h>
#include <stdlib.h>
int main()
{
float f = -317.125;
int i = -1013018624;
printf("Value : %f  %dn",f,i);
printf("Indexs: %p  %pn",&f,&i);
if(i == f)
{
printf("equalsn");
}
else
{
printf("Differentsn");
}
float* pf = &f;
int* pi = &i;
printf("float *pt %p, int *pi  %pn",pf,pi);
if(*pi == *pf)
{
printf("*pt and *pi equalsn");
}
else
{
printf("differentsn");
}
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 samen");
}
else
{
printf("differentsn");
}
printf("*ipi = %un",*ipi);
printf("*ipf = %un",*ipf);
printf("*ipi in hex = %08Xn",*ipi);
printf("*ipf in hex = %08Xnnn",*ipf);



unsigned int ui,uf;
ui = (unsigned int)i;
uf = (unsigned int)f;
printf("ui = %un",ui);
printf("uf = %u",uf);

return 0;
}

在C中,从浮点类型到积分类型的转换是而不是逐位转换。因此,即使if是逐比特相同的,它们也不会以相同的方式转换为unsigned int。你看到的是预期的行为。

最新更新