什么是浮点数
什么是浮点数?
答:浮点数可以理解成二进制下的科学计数法,单精度浮点数的二进制格式有3个部分:1bit的符号部分,0为正1为负,8bit的指数部分范围从-127到128,剩下的是23bit的尾数部分。浮点数还包含双精度浮点数,它的原理和单精度浮点数是一样的。
详细内容如下:
IEEE 754 规定单精度浮点数的二进制格式为:S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFFF
- S:符号部分,1位,0表示正数,1表示负数。
- E:指数部分,8位(双精度为11位),这里规定 00000000 到11111111 分别表示 -127 到 128,所以 01111111 表示 0 ,1000000 标示1。
- F:尾数部分,23位(双精度为52位),尾数部分所表示的完整信息应为 1.FFFFFFFFFFFFFFFFFFFFFFFF,这里的小数点和第一位的1都被省略了,其中 1 <= 1.FFFFFFFFFFFFFFFFFFFFFFFF < 2,注意位数部分的位数是23位。
在10进制的科学计数法中,1.2 * 10^3 中的 1.2 部分通常被称为尾数或系数,3被称为指数。而浮点数可以理解成二进制下的科学计数法。
10进制数转二进制浮点数:
10进制数 -12.5转成单精度浮点数的过程如下:
- 12.5 转成二进制数是 1100.1。
- S:符号部分为 1。
- E:指数部分为 3,根据规则,3转换成指数部分应为:10000010。
- F:尾数部分,将 12.5 转成二进制得到 1100.1,小数点左移3位并右补零补全24位,得到 1.1001000 00000000 00000000,去掉第一位的1和小数点后为 1001000 00000000 00000000。
- 最终,-12.5 的单精度浮点数的二进制表示为 1 10000010 10010000000000000000000。附上代码
public static void main(String[] args) { float floatValue = -12.5f; int intBits = Float.floatToIntBits(floatValue); //floatToIntBits()函数就是直接把ieee754的存储方式的值,当成int值 String binaryString = Integer.toBinaryString(intBits); System.out.println("intBits: " + intBits); //intBits: -1052246016 System.out.println("binary: " + binaryString); //binary: 11000001010010000000000000000000 }
二进制浮点数转10进制数
如果一个单精度浮点数是 0 10000011 11010000000000000000000,对应的十进制是多少?
- S:符号部分表示正数。
- E:指数部分为 4。
- F:尾数部分为 11010000000000000000000,补上省略的1和小数点,得到尾数为 1.1101。
- 将尾数的小数点后移4位得到 11101.0,对应的十进制数是 29,所以答案是29. 附上代码
public static void main(String[] args) { float floatValue = 29f; int intBits = Float.floatToIntBits(floatValue); String binaryString = Integer.toBinaryString(intBits); System.out.println("intBits: " + intBits); //intBits: 1105723392 System.out.println("binary: " + binaryString); //binary: 1000001111010000000000000000000 这里打印的是31位,左边的0被省略掉了 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!