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

时间:2020-10-20 19:57:10

标签: c

程序用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;
}

1 个答案:

答案 0 :(得分:1)

在C语言中,从浮点类型到整数类型的转换不是 逐位转换。因此,即使if逐位相同,它们也不会以相同的方式转换为unsigned int。您看到的是预期的行为。