float occupe 4 octets, ce qui équivaut à int, qui est de 32 bits.
Le premier bit représente le signe, 0 représente un nombre positif et 1 représente un nombre négatif. C’est facile à comprendre, alors ne vous inquiétez pas.
Les 2ème à 9ème bits représentent l'exposant, un total de 8 bits (peut représenter 0-255). La base ici est 2. Afin de représenter à la fois les nombres positifs et négatifs, un décalage de 127 doit être soustrait ici. Dans ce cas, la plage est (-127 à 128). De plus, tous les 0 et tous les 1 sont traités comme un traitement spécial, donc -126 à 127 est directement exprimé.
Les 23 bits restants représentent la partie décimale, où 23 bits représentent un nombre de 24 bits car il existe un 1 par défaut (seul le binaire a cette fonctionnalité).
Le résultat final est : (-1)^(signe) * 1. f * 2^(exposant)
Ici : le signe est le bit de signe, f est la partie décimale de 23 bits, l'exposant est la partie exposant et la plage finale est (parce que les nombres positifs et négatifs sont symétriques, nous ne nous soucions ici que des nombres positifs)
2^(-126) ~~ 2(1-2^(-24)) * 2^127
Il ne s'agit pas de la plage de valeurs du float, car la norme stipule également une représentation dénormalisée et il existe des réglementations spéciales.
Représentation dénormalisée :
Lorsque la partie exposant est entièrement 0 et que la partie décimale n'est pas entièrement 0, cela représente un nombre à virgule flottante dénormalisé, car il n'y a pas de 1 en tête par défaut, mais 0.
Le bit de valeur est 0. f * 2^(-126), indiquant les bits de plage 2^(-149)~~ (1-2^(-23)) * 2^(-126) Le signe n'est pas pris en compte ici. Pourquoi est-il -126 au lieu de -127 ? Si c'est -127, alors l'expression maximale est
2^(-127)-2^(-149), évidemment 2^(-127) ~~2^(-126) ne peut pas être exprimé.
Autres expressions spéciales
1. Lorsque la partie exposant et la partie décimale sont toutes 0, cela représente une valeur 0, qui peut être divisée en +0 et -0 (déterminée par le bit de signe 0x00000000 représente un 0 positif et 0x80000000 représente un 0 négatif).
2. Lorsque la partie exposant est entièrement égale à 1 et la partie décimale est entièrement égale à 0, cela signifie l'infini, y compris l'infini positif et l'infini négatif. 0x7f800000 signifie l'infini positif et 0xff800000 signifie l'infini négatif.
3. Lorsque la partie exposant est entièrement égale à 1 et que la partie décimale n'est pas entièrement égale à 0, cela signifie NaN, qui est divisé en QNaN et SNaN. Les deux sont NaN en Java.
en conclusion:
On peut voir que la plage de valeurs des nombres à virgule flottante est : 2^(-149)~~(2-2^(-23))*2^127, qui est Float. MIN_VALUE et flotteur. MAX_VALUE.
PS : float en hexadécimal, hexadécimal en float
package com.sondon.dev_soceket.test; /** * @Projet : Communication matérielle* @Package : com.sondon.tcpip * @Class : Test.java * @Company Guangzhou Xundong Network Technology Co., Ltd.* @Auteur : Cai Wenfeng* @DateTime : 2 avril 2015 11:21:53 * @Blog : http://blog.csdn.net/caiwenfeng_for_23 * @Description : {Test} */ 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); f=0,15490197f; System.out.println(Integer.toHexString(Float.floatToIntBits(f)));