#include <stdio.h>
int main()
{
unsigned char* p;
int i1 = 0xFFFFFFFF;
p = (unsigned char*)&i1;
printf("%X,%X,%X,%X\n", p[0], p[1], p[2], p[3]);
float f1 = 0x7FFFFFFF;//f1在内存中不会按照字面值存储
p = (unsigned char*)&f1;
printf("%X,%X,%X,%X\n", p[0], p[1], p[2], p[3]);
int i2 = 0x7FFFFFFF;
double d1 = 0;
d1 = d1 + (double)i2*i2;//如果不强转,就会因为溢出而出错
printf("%f\n", d1);
d1 = 0;
d1 = d1 + i2*i2;
printf("%f\n", d1);
d1 = 0;
d1 = i2*i2;
printf("%f\n", d1);
f1=i2;//这与f1=0x7FFFFFFF;一样
return 0;
}
上述代码在g++编译后运行结果为:
FF,FF,FF,FF
0,0,0,4F
4611686014132420608.000000
1.000000
1.000000