// =====================================================================================
//
// 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
18int i=5;
(gdb)
(gdb) n
19float f=i;
(gdb) print i
$1 = 5
(gdb) x &i
0xbffff404:0x00000005
(gdb) print f
$2 = 3.98773969e-34
(gdb) n
20float 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
21return 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
}
分享到:
2010-05-08 15:03
浏览 587
评论