float类型的存储方式

float类型的存储方式

  • float的存储格式
  • 实例分析
  • 示例代码
  • GDB查看实际存储

float的存储格式

float类型又称为单精度浮点类型,在 IEEE 754-2008 中是这样定义它的结构的:
S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF
31 30 23 22 0

float类型总共4个字节——32位:
符号位 其中最左边的为符号位,0为正,1为负。
指数 接下来的E是指数,一共8位,也用二进制来表示。IEEE规定,在float类型中,用来计算指数的偏移量为127。
尾数 最后的F是小数部分,尾数正是由这23位的小数部分+1位组成的。

实例分析

已8.25为例进行分析:
8:二进制位1000
0.25:为2^-2,即为0.01
因此,8.25转换成二进制位1000.01
用科学记数法表示为:1.00001*2^3
因此:
符号位:0(表示正数)
指数位:3+127=130=128+2=2^7+2=10000000&000000010=100000010
尾数:00001-000000-000000-000000
注意,因为用科学记数法,所以最前面肯定是1,故不记录了。
因此,整体数据为 0-10000010-00001-000000-000000-000000

示例代码

int main()
{
 float a=8.25;
 float b=8.24;
 float c=8.0;
}

GDB查看实际存储

gdb -g float.c -o float.o

MacBook-Pro:Code wuing2$ gdb float.o
GNU gdb (GDB) 8.0.1
********
(gdb) b main
Breakpoint 1 at 0x100000f8e: file float.c, line 3.
(gdb) r
Starting program: /Users/wuing2/Code/float.o
[New Thread 0x2603 of process 60957]
warning: unhandled dyld version (15)

Thread 2 hit Breakpoint 1, main () at float.c:3
5	 float a=8.25;
(gdb) n
6	 float b=8.24;
(gdb) n
7	 float c=8.0;
(gdb) n
8	}
(gdb) p &a
$3 = (float *) 0x7ffeefbffa2c
(gdb) x/t 0x7ffeefbffa2c
0x7ffeefbffa2c:	01000001000001000000000000000000
(gdb) p &b
$4 = (float *) 0x7ffeefbffa28
(gdb) x/t 0x7ffeefbffa28
0x7ffeefbffa28:	01000001000000111101011100001010
(gdb) p &c
$5 = (float *) 0x7ffeefbffa24
(gdb) x/t 0x7ffeefbffa24
0x7ffeefbffa24:	01000001000000000000000000000000

你可能感兴趣的:(float类型的存储方式)