首页 > 编程知识 正文

float的存储方式,float在内存中的存储形式

时间:2023-05-06 16:01:27 阅读:270132 作者:4128

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.oGNU gdb (GDB) 8.0.1********(gdb) b mainBreakpoint 1 at 0x100000f8e: file float.c, line 3.(gdb) rStarting 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:35 float a=8.25;(gdb) n6 float b=8.24;(gdb) n7 float c=8.0;(gdb) n8}(gdb) p &a$3 = (float *) 0x7ffeefbffa2c(gdb) x/t 0x7ffeefbffa2c0x7ffeefbffa2c:01000001000001000000000000000000(gdb) p &b$4 = (float *) 0x7ffeefbffa28(gdb) x/t 0x7ffeefbffa280x7ffeefbffa28:01000001000000111101011100001010(gdb) p &c$5 = (float *) 0x7ffeefbffa24(gdb) x/t 0x7ffeefbffa240x7ffeefbffa24:01000001000000000000000000000000

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。