float和int没办法分开,还是得区分对待
Ubuntu下测试的,windows下没试过,大家试了告诉我啊。
#include <stdio.h>
union FLOATUN{
unsigned int unui;
float unfl;
};
int main(){
FLOATUN fun;
FLOATUN *pfun;
pfun = (FLOATUN *)&fun.unui;
printf("usint addr:%p\n",pfun);
pfun = (FLOATUN *)&fun.unfl;
printf("float addr:%p\n",pfun);
bool aa;
bool *a = &aa; *a= 1;
char bb;
char *b = &bb; *b= 0x12;
unsigned char cc;
unsigned char *c = &cc; *c= 0x12;
short dd;
short *d = ⅆ *d= 0x123;
unsigned short ee;
unsigned short *e = ⅇ *e= 0x123;
int ff;
int *f = &ff; *f= 0x123;
unsigned int gg;
unsigned int *g = ≫ *g= 0x123;
float hh;
float *h = &hh; *h= 12.34;
double ii;
double *i = ⅈ *i= 12.34;
unsigned int ui;
float uf;
// 用联合体获取12.34的32位值
fun.unfl = 12.34;
printf("float hex value:%x\n",fun.unui);
ui = *a;
pfun = (FLOATUN*) &ui;
printf("a:%08x\n",*pfun);
ui = *b;
pfun = (FLOATUN*) &ui;
printf("b:%08x\n",*pfun);
ui = *c;
pfun = (FLOATUN*) &ui;
printf("c:%08x\n",*pfun);
ui = *d;
pfun = (FLOATUN*) &ui;
printf("d:%08x\n",*pfun);
ui = *e;
pfun = (FLOATUN*) &ui;
printf("e:%08x\n",*pfun);
ui = *f;
pfun = (FLOATUN*) &ui;
printf("f:%08x\n",*pfun);
ui = *g;
pfun = (FLOATUN*) &ui;
printf("g:%08x\n",*pfun);
uf = *h;
pfun = (FLOATUN*) &uf;
printf("h:%08x\n",*pfun);
uf = *i;
pfun = (FLOATUN*) &uf;
printf("i:%08x\n",*pfun);
}
输出
usint addr:0x7fff87c078e0
float addr:0x7fff87c078e0
float hex value:414570a4
a:00000001
b:00000012
c:00000012
d:00000123
e:00000123
f:00000123
g:00000123
h:414570a4
i:414570a4