float belegt 4 Bytes, was dem 32-Bit-Int entspricht.
Das erste Bit stellt das Vorzeichen dar, 0 stellt eine positive Zahl dar und 1 stellt eine negative Zahl dar. Das ist leicht zu verstehen, also machen Sie sich darüber keine Sorgen.
Das 2. bis 9. Bit stellt den Exponenten dar, insgesamt 8 Bit (kann 0-255 darstellen). Die Basis ist hier 2. Um sowohl positive als auch negative Zahlen darzustellen, muss hier ein Offset von 127 subtrahiert werden. In diesem Fall beträgt der Bereich (-127 bis 128). Darüber hinaus werden alle Nullen und alle Einsen als Sonderverarbeitung behandelt, sodass -126 bis 127 direkt ausgedrückt werden.
Die verbleibenden 23 Bit stellen den Dezimalteil dar, wobei 23 Bit eine 24-Bit-Zahl darstellen, da standardmäßig eine 1 vorangestellte ist (nur Binärzahlen verfügen über diese Funktion).
Das Endergebnis ist: (-1)^(Vorzeichen) * 1. f * 2^(Exponent)
Hier: sign ist das Vorzeichenbit, f ist der Dezimalteil von 23 Bits, Exponent ist der Exponententeil und der endgültige Bereich ist (da positive und negative Zahlen symmetrisch sind, kümmern wir uns hier nur um positive Zahlen)
2^(-126) ~~ 2(1-2^(-24)) * 2^127
Dies ist nicht der Wertebereich von Float, da der Standard auch eine denormalisierte Darstellung vorschreibt und es einige Sonderregelungen gibt.
Denormalisierte Darstellung:
Wenn der Exponententeil ganz 0 ist und der Dezimalteil nicht ganz 0 ist, stellt er eine denormalisierte Gleitkommazahl dar, da es standardmäßig keine führende 1, sondern 0 gibt.
Das Wertbit ist 0. f * 2^(-126), Angabe der Bereichsbits 2^(-149)~~ (1-2^(-23)) * 2^(-126) Das Vorzeichen wird hier nicht berücksichtigt. Warum ist es -126 statt -127? Wenn es -127 ist, dann ist der maximale Ausdruck
2^(-127)-2^(-149), offensichtlich kann 2^(-127) ~~2^(-126) nicht ausgedrückt werden.
Andere Sonderausdrücke
1. Wenn der Exponententeil und der Dezimalteil alle 0 sind, stellt dies einen 0-Wert dar, der in +0 und -0 unterteilt werden kann (bestimmt durch das Vorzeichenbit 0x00000000 stellt eine positive 0 dar und 0x80000000 stellt eine negative 0 dar).
2. Wenn der Exponententeil vollständig 1 und der Dezimalteil vollständig 0 ist, bedeutet dies Unendlich, einschließlich positiver Unendlichkeit und negativer Unendlichkeit. 0x7f800000 bedeutet positive Unendlichkeit und 0xff800000 bedeutet negative Unendlichkeit.
3. Wenn der Exponententeil alle 1 und der Dezimalteil nicht alle 0 ist, bedeutet dies NaN, das in QNaN und SNaN unterteilt ist. Beide sind NaN in Java.
abschließend:
Es ist ersichtlich, dass der Wertebereich von Gleitkommazahlen wie folgt lautet: 2^(-149)~~(2-2^(-23))*2^127, was Float ist. MIN_VALUE und Float. MAX_VALUE.
PS: Float zu Hexadezimal, Hexadezimal zu Float
Paket com.sondon.dev_soceket.test; /** * @Project: Hardware-Kommunikation* @Package: com.sondon.tcpip * @Class: Test.java * @Company Guangzhou Xundong Network Technology Co., Ltd.* @Autor: Cai Wenfeng* @DateTime: 2. April 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)));