// ===================================================================================== // // Filename: int2float.c // // Description: int和float转换时,内存是如何变的,gdb x调试 // // Version: 1.0 // Created: 2010年05月06日 20时44分15秒 // Revision: none // Compiler: g++ // // Author: Li Weijian (), lwj1396@163.com // Company: // // ===================================================================================== int main() { int i=5; float f=i;//自动转换 float ff=*(float*)&i;//内存变得一样,值则不一样了 return 0; Breakpoint 1, main () at int2float.c:18 18 int i=5; (gdb) (gdb) n 19 float f=i; (gdb) print i $1 = 5 (gdb) x &i 0xbffff404: 0x00000005 (gdb) print f $2 = 3.98773969e-34 (gdb) n 20 float ff=*(float*)&i; (gdb) print f $3 = 5 (gdb) x &f 0xbffff400: 0x40a00000 (gdb) print ff $4 = 3.6963619e-39 (gdb) print &i $5 = (int *) 0xbffff404 (gdb) x &i 0xbffff404: 0x00000005 (gdb) n 21 return 0; (gdb) print ff $6 = 7.00649232e-45 (gdb) x ff 0x0: Cannot access memory at address 0x0 (gdb) x &ff 0xbffff3fc: 0x00000005 (gdb) x &i 0xbffff404: 0x00000005 (gdb) print ff $7 = 7.00649232e-45 (gdb) x &f 0xbffff400: 0x40a00000 0x40a00000 0100 0000 1010 0000 0000 0000 0000 0000 842 1 1+2**7 129-127=2 1.25*2**2=5 x xxxxxxxx xxxxxxxxxxxxxxxxxxxxx 符号 8位exp 2**-1 2**-2 23位 计算公式:1.xxxx*2**exp-127 思考:float f=7.0; short s=*(short*)&f; 取前两个byte }