float占用4个字节,和int是一样,也就是32bit。
第1个bit表示符号,0表示正数,1表示负数,这个很好理解,不用多管。
第2-9个bit表示指数,一共8为(可以表示0-255),这里的底数是2,为了同时表示正数和负数,这里要减去127的偏移量。这样的话范围就是(-127到128),另外全0和全1作为特殊处理,所以直接表示-126到127。
剩下的23位表示小数部分,这里23位表示了24位的数字,因为有一个默认的前导1(只有二进制才有这个特性)。
最后结果是:(-1)^(sign) * 1。f * 2^(exponent)
这里:sign是符号位,f是23bit的小数部分,exponent是指数部分,最后表示范围是(因为正负数是对称的,这里只关心正数)
2^(-126) ~~ 2(1-2^(-24)) * 2^127
这个还不是float的取值范围,因为标准中还规定了非规格化表示法,另外还有一些特殊规定。
非规格化表示:
当指数部分全0而且小数部分不全0时表示的是非规格化的浮点数,因为这里默认没有前导1,而是0。
取值位0。f * 2^(-126),表示范围位 2^(-149)~~ (1-2^(-23)) * 2^(-126) 这里没有考虑符号。这里为什么是-126而不是-127? 如果是-127的话,那么最大表示为
2^(-127)-2^(-149),很显然2^(-127) ~~2^(-126) 就没法表示了。
其他特殊表示
1。当指数部分和小数部分全为0时,表示0值,有+0和-0之分(符号位决定),0x00000000表示正0,0x80000000表示负0。
2。指数部分全1,小数部分全0时,表示无穷大,有正无穷和负无穷,0x7f800000表示正无穷,0xff800000表示负无穷。
3。指数部分全1,小数部分不全0时,表示NaN,分为QNaN和SNaN,Java中都是NaN。
结论:
可以看出浮点数的取值范围是:2^(-149)~~(2-2^(-23))*2^127,也就是Float。MIN_VALUE和Float。MAX_VALUE。
PS:float转16进制,16进制转float
package com.sondon.dev_soceket.test; /** * @Project : 硬件通讯 * @Package : com.sondon.tcpip * @Class : Test.java * @Company 广州讯动网络科技有限公司 * @Author : 蔡文锋 * @DateTime:2015年4月2日 上午11:21:53 * @Blog:http://blog.csdn.net/caiwenfeng_for_23 * @Description : { 测试 } */ public class Test { public static void main(String[] args) { String s="3E1E9E9F"; Float value = Float.intBitsToFloat(Integer.valueOf(s.trim(), 16)); System.out.println(value); Float f=0.15490197f; System.out.println(Integer.toHexString(Float.floatToIntBits(f))); } }
问题内容: 如何将 float64 值转换为Golang的 十六进制字符串 ?(IEEE 754格式) 样本:-561.2863至0xc40c5253 问题答案: 用途: 游乐场:http : //play.golang.org/p/WEZEtCU1Zl。
问题内容: 我有一个家庭作业,需要在十进制,二进制和十六进制之间进行三向转换。我需要帮助的功能是将十进制转换为十六进制。我几乎不了解十六进制,但是如何将十进制转换为十六进制。我需要一个接受并返回的函数。不幸的是我没有此功能的任何草稿,我完全迷路了。我只有这个。 另外,我不能使用诸如Integer.toHexString()之类的预制函数或任何其他东西,我需要真正地制作算法,否则我什么都不会学。 问
我想知道如何将舞蹈方法的十进制结果包含到灯光方法中。例如,在这个程序中,如果我输入5F,十进制结果将是95。我希望95在light方法中显示为静态int变量,以便转换为二进制数。如果你能告诉我如何将十六进制数限制在2位数以内,那也会很有帮助。感谢阅读! } }
问题内容: 如何在Java中将十六进制字符串转换为单精度浮点数? 例如,如何实现: 浮点数f = HexStringToFloat(“ BF800000”); // f现在应包含-1.0 我问这个是因为我尝试过: 但是我得到以下异常: java.lang.NumberFormatException:对于输入字符串:“ bf800000” 问题答案:
问题内容: 如上面的标题。我想从一个十六进制数字 我想转换为。 问题答案:
我需要转换十六进制- 当我运行这个错误实际上是显示我需要的值但我不能得到它 groovy.lang.的方法:静态java.lang.我nteger.parseInt()适用于参数类型:(java.math.大整数,java.lang.整数)值:[28855032353026779507009821653742961358,...]可能的解决方案:parseInt(java.lang.String,