前提:我们知道IEEE 754标准在尾数(M)全0情况下,如果指数(E)全1,那么这个数表示无穷,如果指数(E)全0 ,那么这个数表示0 。e.g. 那么以float类型(32位)来说,应该是正无穷:0x7F800000表示正无穷
问题:(1)我们用如下语句:
float num=0x7F800000; System.out.println(num);
那么输出是2.13909504E9,为什么?
(2)如果是System.out.println(Float.isInfinite(num))为什么是false?
(3)我们来看Float.POSITIVE_INFINITY的解释
A constant holding the positive infinity of type float
. It is equal to the value returned by Float.intBitsToFloat(0x7f800000)
.
解答:一切的来源都是因为对float的错误认识,我们知道,int x=0x7F80000可以得到一个十进制整数值,那么num=2139095040和x=2139095040是相等的,因为当我们用十六进制为float类型赋值时,只是赋予了num整数部分,也就是说num会被解析为2139095040(0x7f800000),而不是内存中的十六进制表示,因为java首先会把byte转换为int,
然后再赋予float。
intBitsFloat这个方法:就是将整数值按照IEEE754转变为Float类型,也就是说,在Float类型值和Int类型值在内存中是相等的。这也就解释了第三个问题
那么,如果我们想用十六进制赋予Float类型一个POSITIVE_INFINITY,怎么去做?
答案是死了这条心吧,我们可以从另一个方面去验证答案
float a=0x0.000000p-127f; System.out.printf("%x\n", a);
看看报的异常:
Exception in thread "main" java.util.IllegalFormatConversionException: x != java.lang.Float
at java.util.Formatter$FormatSpecifier.failConversion(Formatter.java:3992)
at java.util.Formatter$FormatSpecifier.printInteger(Formatter.java:2708)
at java.util.Formatter$FormatSpecifier.print(Formatter.java:2660)
at java.util.Formatter.format(Formatter.java:2432)
at java.io.PrintStream.format(PrintStream.java:920)
at java.io.PrintStream.printf(PrintStream.java:821)
at com.common.MD5.MD5.main(MD5.java:17)
也就是说,float不支持十六进制表示,我们可以用上述a那样的十六进制去赋予float类型值,但是不能像其在内存值那样去赋予它(那只有整型才能做到)
所以我们只能借助整型去得到POSITIVE_INFINITY,也就是利用方法Float.intBitsToFloat
相关推荐
简单的比较两个数字大小的程序运用java基本语句实现 下载Java判断两个数字大小代码实例
Java判断数字是否在制定范围 A B 中或者与A B 相等
在本项目中,我们利用Java语言来开发一个具有图形用户界面(GUI)的猜数字大小游戏。这个项目结合了事件监听、模型-视图-控制器(MVC)设计模式等核心概念,使得程序结构清晰,易于维护。接下来,我们将详细讨论实现...
在Java编程中,Double类型的数值比较是一个常见的操作,但与我们通常处理整数或浮点数的方式略有不同。本文将详细探讨如何正确地比较Java中的Double类型数值。 首先,了解`Double`类型在Java中的定义至关重要。`...
在Java编程中,获取磁盘大小是常见的系统信息获取任务,尤其在开发涉及资源管理或者存储监控的应用时显得尤为重要。本篇文章将详细讲解如何利用Java API来获取磁盘的总大小、已用空间以及剩余空间。 首先,我们需要...
在给定的代码片段中,使用了冒泡排序算法来对用户输入的十个整型数字进行排序。下面将详细解析这段代码中的知识点,包括冒泡排序的基本原理、Java中的数组使用、用户输入处理以及循环和条件语句的应用。 ### 冒泡...
在Java编程中,当涉及到需要精确数值计算的场景时,我们通常会使用`BigDecimal`类。这是因为`float`和`double`类型虽然适用于科学计算和工程计算,但它们基于二进制浮点运算,不能保证完全精确的结果。而`BigDecimal...
本知识点主要探讨如何在Java中实现自适应图片大小的水印功能,以及遇到图片过小时的处理策略。 首先,我们需要理解水印的基本概念。水印是在图像或文档上添加的一种视觉标记,它可以是文字、图像或者图形,用于表明...
在Java中,可以使用if-else语句或switch语句来比较两个数的大小。例如,以下代码可以比较两个整数的大小: ```java public class CompareTwo { public static void main(String[] args) { int a = 35; int b = 23...
本程序旨在通过Java语言实现对四个输入整数进行大小比较的功能,并按照从小到大的顺序输出这些数字。这是一个基础的排序算法示例,适用于初学者理解和实践。 #### 代码结构概述 该程序由两个类组成:`compare` 和 ...
在《JAVA数字拼图游戏》中,开发者运用了Java语言强大的图形用户界面(GUI)库,包括`java.awt`和`java.awt.event`包中的类,来构建一个互动性强且功能丰富的数字拼图游戏。游戏不仅提供了基本的拼图操作,还集成了...
在上述代码中,`JPEGImageWriteParam`允许我们设置压缩质量,数值越小,压缩后的图片文件越小,但质量也会下降。 除了Java 2D API,还有一些第三方库,如Apache Commons Imaging(以前的Sanselan)和ImageMagick,...
在Java数字时钟中,可以使用`LocalTime`类获取当前时间,然后将其格式化为合适的字符串,如“HH:mm:ss”或“HH:mm:ss a”,用于在GUI中显示。 5. **资源加载**: 背景图片加载通常涉及`javax.imageio.ImageIO`类,...
### Java 摇骰子比大小程序解析 #### 一、程序概述 本文将详细介绍一个简单的Java程序,该程序能够实现模拟摇骰子并比较大小的功能。程序的主要目的是让用户预测摇出的骰子点数是大还是小,并根据实际摇出的结果与...
5. **随机数生成**:数字的随机生成需要用到java.util.Random类,以确保每个数字的大小和颜色都是随机的。 6. **颜色操作**:Java.awt.Color类提供了创建和操作颜色的方法,游戏中的“彩虹”效果就是通过为每个数字...
在`ClockDemo.java`文件中,你会找到上述代码的实现,它构成了一个基本的Java数字时钟程序。运行这个程序,你将在Java Swing窗口中看到一个实时更新的数字时钟。通过扩展这个基础,你可以添加更多的功能,如日期显示...
在Java编程环境中,生成带有阿拉伯数字的图片是一项实用的任务,特别是在网页开发或者自动化测试中,可能需要这样的图像作为标识或顺序指示。以下是如何使用Java来实现这个功能的详细步骤和相关知识点。 首先,我们...
在这个"java猜数字小程序"中,我们将探讨如何使用Java Swing库来构建一个简单的猜数字游戏。游戏规则是:计算机随机生成一个数字,玩家有十次机会去猜测这个数字,并在猜的过程中收到提示,提示他们的猜测是偏大还是...
在Java编程中,比较字母和数字组合的字符串大小是一个常见的需求,特别是在处理用户输入或排序混合类型数据时。本文将详细介绍如何实现此类比较,并提供一个具体的实现示例。 首先,我们要明白,Java中的`String`类...
本文将详细介绍如何在Java中通过成员方法重载来实现对100以内随机数大小的比较。这种方法不仅能够提高代码的可读性和可维护性,还能使得程序更加灵活,能够应对不同数据类型之间的比较。 #### 成员方法重载的概念 ...