يحتل float 4 بايت، وهو نفس حجم int، وهو 32 بت.
يمثل البت الأول الإشارة، ويمثل 0 رقمًا موجبًا، ويمثل 1 رقمًا سالبًا. وهذا أمر سهل الفهم، لذا لا تقلق بشأنه.
تمثل البتات من الثاني إلى التاسع الأس، بإجمالي 8 بتات (يمكن أن تمثل 0-255). الأساس هنا هو 2. لتمثيل كل من الأرقام الموجبة والسالبة، يجب طرح إزاحة قدرها 127 هنا. في هذه الحالة، النطاق هو (-127 إلى 128)، بالإضافة إلى ذلك، يتم التعامل مع جميع الأصفار والواحدات كمعالجة خاصة، لذلك يتم التعبير عن -126 إلى 127 مباشرة.
تمثل الـ 23 بت المتبقية الجزء العشري، حيث تمثل 23 بت رقمًا مكونًا من 24 بت نظرًا لوجود بادئة افتراضية 1 (فقط الثنائي لديه هذه الميزة).
النتيجة النهائية هي: (-1)^(علامة) * 1. و * 2^(الأس)
هنا: الإشارة هي بت الإشارة، وf هو الجزء العشري من 23 بت، والأس هو جزء الأس، والنطاق النهائي هو (نظرًا لأن الأرقام الموجبة والسالبة متماثلة، فإننا نهتم فقط بالأرقام الموجبة هنا)
2^(-126) ~~ 2(1-2^(-24)) * 2^127
هذا ليس نطاق قيمة التعويم، لأن المعيار ينص أيضًا على التمثيل غير الطبيعي، وهناك بعض اللوائح الخاصة.
التمثيل غير الطبيعي:
عندما يكون جزء الأس كله 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 وكلاهما NaN في Java.
ختاماً:
يمكن ملاحظة أن نطاق قيمة أرقام الفاصلة العائمة هو: 2^(-149)~~(2-2^(-23))*2^127، وهو تعويم. MIN_VALUE وتعويم. MAX_VALUE.
PS: تعويم إلى النظام الست عشري، والنظام الست عشري للتعويم
package com.sondon.dev_soceket.test /** * @Project: اتصالات الأجهزة* @Package: com.sondon.tcpip * @Class: Test.java * @Company قوانغتشو Xundong Network Technology Co., Ltd.* @Author: تساى ونفينج* @DateTime: ٢ أبريل، ٢٠١٥ الساعة ١١:٢١:٥٣ صباحًا * @Blog: http://blog.csdn.net/caiwenfeng_for_23 * @Description: {Test} */ public class Test { public static void main(String[] args) { String s="3E1E9E9F"; intBitsToFloat(Integer.valueOf(s.trim(), 16)); System.out.println(value); f=0.15490197f; System.out.println(Integer.toHexString(Float.floatToIntBits(f)));