float menempati 4 byte, sama dengan in, yaitu 32bit.
Bit pertama melambangkan tanda, 0 melambangkan bilangan positif, dan 1 melambangkan bilangan negatif.
Bit ke-2 hingga ke-9 mewakili eksponen, totalnya 8 bit (dapat mewakili 0-255). Basis di sini adalah 2. Untuk mewakili bilangan positif dan negatif, offset 127 perlu dikurangi di sini. Dalam hal ini, rentangnya adalah (-127 hingga 128). Selain itu, semua angka 0 dan semua angka 1 diperlakukan sebagai pemrosesan khusus, sehingga -126 hingga 127 dinyatakan secara langsung.
23 bit sisanya mewakili bagian desimal, dimana 23 bit mewakili angka 24-bit karena ada awalan default 1 (hanya biner yang memiliki fitur ini).
Hasil akhirnya adalah: (-1)^(tanda) * 1. f * 2^(eksponen)
Di sini: tanda adalah bit tanda, f adalah bagian desimal dari 23 bit, eksponen adalah bagian eksponen, dan rentang akhirnya adalah (karena bilangan positif dan negatif simetris, di sini kita hanya peduli pada bilangan positif)
2^(-126) ~~ 2(1-2^(-24)) * 2^127
Ini bukan kisaran nilai float, karena standar tersebut juga menetapkan representasi yang didenormalisasi, dan terdapat beberapa peraturan khusus.
Representasi yang didenormalisasi:
Jika bagian eksponen semuanya 0 dan bagian desimal tidak semuanya 0, ini mewakili bilangan floating point yang didenormalisasi, karena tidak ada awalan 1 secara default, melainkan 0.
Bit nilainya adalah 0. f * 2^(-126), menunjukkan bit rentang 2^(-149)~~ (1-2^(-23)) * 2^(-126) Tanda tidak dipertimbangkan di sini. Mengapa -126 bukannya -127? Jika -127, maka ekspresi maksimumnya adalah
2^(-127)-2^(-149), jelas 2^(-127) ~~2^(-126) tidak dapat diungkapkan.
Ekspresi khusus lainnya
1. Jika bagian eksponen dan bagian desimal semuanya 0, maka ini mewakili nilai 0, yang dapat dibagi menjadi +0 dan -0 (ditentukan oleh bit tanda). 0x00000000 mewakili positif 0, dan 0x80000000 mewakili negatif 0.
2. Jika bagian eksponennya 1 dan bagian desimalnya 0, berarti tak terhingga, termasuk tak terhingga positif, dan 0x7f800000 berarti tak terhingga positif, dan 0xff800000 berarti tak terhingga negatif.
3. Jika bagian eksponennya 1 dan bagian desimalnya tidak semuanya 0, berarti NaN yang terbagi menjadi QNaN dan SNaN Keduanya adalah NaN di Java.
kesimpulannya:
Terlihat rentang nilai bilangan floating point adalah: 2^(-149)~~(2-2^(-23))*2^127 yaitu Float. MIN_VALUE dan Mengambang. MAX_VALUE.
PS: float ke heksadesimal, heksadesimal ke float
paket com.sondon.dev_soceket.test; /** * @Proyek: Komunikasi perangkat keras* @Paket: com.sondon.tcpip * @Kelas: Test.java * @Perusahaan Guangzhou Xundong Network Technology Co., Ltd.* @Penulis: Cai Wenfeng* @DateTime: 2 April 2015 11:21:53 * @Blog: http://blog.csdn.net/caiwenfeng_for_23 * @Deskripsi: {Tes} */ Tes kelas publik { public static void main(String[] args) { String s="3E1E9E9F"; intBitsToFloat(Integer.valueOf(s.trim(), 16)); System.out.println(nilai); f=0.15490197f; Sistem.keluar.println(Bilangan Bulat.toHexString(Float.floatToIntBits(f)));