我正在学习编程入门课程(java),我很想理解为什么java中原始数据类型的范围是原样的。当涉及到像一个字节这样的类整数数据类型时,似乎很容易理解为什么它只接受从-128到127的值;一个字节的大小是8位,最多可以取256个值,所以我们可以给这256个值中的每一个赋一个自然数,我相信这就是幕后发生的事情。它还解释了为什么128被排除在外:我们有128个负数,127个正数,还有零。这些加起来已经有256个了。在[1256]和[-128128]之间没有双射。
对于所有类整数数据类型的范围,这种想法是有意义的,但是当涉及浮点时,人们会看到一些奇怪的范围。例如,double的范围是[-2^{1074},(2-2^{-52})2^{1023}]。为什么会这样呢?
很抱歉记号太麻烦了,显然我不能在这里使用乳胶。
Java使用IEEE-754 binary64格式。在此格式中,1位代表符号(+或−,根据位是0还是1),8位用于指数,52位用于有效的初级编码。53位有效数的一位通过指数进行编码。
指数字段的值范围为0到2047。2047保留用于无穷大和nan。0用于次正规数。值1到2046用于正常数字。在此范围内,指数字段值E表示指数E=E-1023。因此e的最低值为1−1023=−1022,最高值为2046−1023=1023。指数字段值0也表示E的最低值,−1022。
53位有效数表示二进制数字d.ddd…ddd2,其中,如果指数字段为0,第一个d为0,如果指数字段为1到2046,第一个d为1。“.”后面有52位,它们由主要有效字段给出。
现在我们可以看到,最小的正数是当S为1,E为0,F为则表示的值为(−1)0•2−1022•(0+1•2−52)=+1•2−1022•2−52=2−1074。
当S为1,E为2046,且F为则表示的值为(−1)0•22046−1023•(1+(252-1)•252=+1•21023•(21−252)=21023•(21−252)=21024−2971。
问题内容: Java中float和double的范围包括什么? 为什么不建议在精度要求很高的地方使用float或double? 问题答案: Java的类的成员包含类型的Min和Max值。 检出的和静态最终成员。 (有些)人们会建议不要在精度和精度至关重要的事情上使用浮点类型,因为舍入误差可能会使可测量(少量)的量不起作用。
问题内容: 在我的一个实验室的示例Java程序中,我有两种分别采用Double和double参数的不同方法。 将参数传递给它们时,如何区分它们? 问题答案: 首先,您需要了解两种类型之间的区别。 是基本类型,而是对象。 下面的代码显示了一个重载的方法,我认为它与您的实验室代码相似。 有几种方法可以调用这些方法: 这些调用将导致:
我使用的是Windows 7机器,其"控制面板\时钟,语言和区域"是丹麦" 根据扫描仪的文档: 扫描仪的初始区域设置是Locale.getDefault()方法返回的值; 但当我运行代码时: 它输出“en_US”,然后抛出一个java。util。sc.nextDouble()处的输入不匹配异常。当扫描器初始化为“1,0”时,它工作 但是,如果我明确设置了区域设置: 它输出“en_US”,然后很好地
我所知道的是: 注释是在java 5中添加的 注释可以在方法、类和属性中使用 注释可以在运行时、类、源代码中使用(我不知道如何使用类和源代码,以及它们的特性) 当java程序运行时,可以实现带有保留的注释,即运行时注释 我想实现一个注释,具有以下特性: > @MyAnnotation(allowMethods={xxx.doSomething}) public void getValue(){}
问题内容: 在我的脚本中,我需要在给定开始日期和结束日期的日期范围内执行一组操作。 请为我提供使用Java实现此目的的指导。 我知道上面的代码是根本不可能的,但是我这样做是为了向您展示我想要实现的目标。 问题答案: 好吧,您可以使用Java 8的time- API 专门针对此问题(或与Java 7及更早版本等效的Joda Time类)执行类似的操作 我会 彻底 建议在内置/ 类上使用(或Joda
问题内容: 如何解开返回为以下内容的字符串: (可选(可选“蓝色”)) cityLabelName打印为 问题答案: 给定一个double可选,如以下双重包装: @Leo 表明您可以使用 可选绑定 两次: 或强制解开两次: 您可以使用以下5种方法来安全解开double可选: 方法1: 您还可以使用 模式匹配 : 正如@netigger在回答中指出的那样,它也可以写成: 简洁性虽然较差,但较容易阅读