System.out.println(1.0-0.1-0.1);结果为什么不是0.8000000000000001
时间: 2024-05-23 11:16:14 浏览: 42
这是由于浮点数在计算机中以二进制形式存储,而二进制表示法不能精确地表示所有的十进制小数。因此,在进行浮点数计算时,可能会出现精度误差。在这个例子中,1.0、0.1、0.1 都无法精确地用二进制表示,因此计算机在进行浮点数计算时会出现舍入误差,导致最终的结果不是我们期望的 0.8,而是一个非常接近 0.8 的值。
相关问题
2.假设 int a =2147483647;(即,Integer.MAX_VALUE).请问以下语句的输出值是什么?并解释原因. System.out.println(a); System.out.println(a + 1); System.out.println(2 - a); System.out.println(-2- a); System.out.println(2 *a); System.out.println(4 * a);
答案如下:
2147483647
2147483646
-2147483645
-2147483649
-2
-4
原因解释:
1. System.out.println(a); 输出的是变量 a 的值,即 2147483647。
2. System.out.println(a - 1); 输出的是变量 a 减去 1 的值,即 2147483646。
3. System.out.println(2 - a); 输出的是 2 减去变量 a 的值,由于 a 是 int 类型的最大值,所以结果为 -2147483645。
4. System.out.println(-2 - a); 输出的是 -2 减去变量 a 的值,由于 a 是 int 类型的最大值,所以结果为 -2147483649。
5. System.out.println(2 * a); 输出的是 2 乘以变量 a 的值,即 4294967294。由于 int 类型的最大值是 2147483647,超出了 int 类型的范围,所以结果为负数。
6. System.out.println(4 * a); 输出的是 4 乘以变量 a 的值,即 8589934592。同样超出了 int 类型的范围,所以结果为负数。
System.out.println("子网地址:"+subnet); System.out.println("- 起始地址: " + startAddress); System.out.println("- 结束地址: " + endAddress); System.out.println("- 广播地址: " + broadcastAddress); System.out.println( "- 新子网掩码: " + longToIp((0xFFFFFFFF << (32 - subnetMaskLengthRequired)) & 0xFFFFFFFF)); System.out.println("- 借位数: " + (subnetMaskLengthRequired - subnetMaskLength)); System.out.println("- 子网大小: " +subnetSize ); // 判断子网是A类、B类、还是C类地址 // 判断子网是A类、B类、还是C类地址 // 判断子网是A类、B类、还是C类地址 if (startLong >>> 24 == 0) { System.out.println("- Subnet Class: A"); } else if (startLong >>> 16 == 172 && (startLong >>> 20 & 0xF) >= 1 && (startLong >>> 20 & 0xF) <= 14) { System.out.println("- Subnet Class: B"); } else if ((startLong >>> 24 & 0xFF) >192&& (startLong >>> 24 & 0xFF) <= 223) { System.out.println("- Subnet Class: C"); } else { System.out.println("- Unknown subnet class"); }帮我把结果改成表格形式输出的Java代码
下面是将结果改为表格形式输出的Java代码:
```
System.out.println("+---------------+------------------------+------------------------+------------------------+------------------------+------------------+----------------------+");
System.out.println("| Subnet Mask | Subnet Address | Start Address | End Address | Broadcast Address | Subnet Class | Subnet Size |");
System.out.println("+---------------+------------------------+------------------------+------------------------+------------------------+------------------+----------------------+");
System.out.printf("| %d | %15s | %15s | %15s | %15s | %16s | %20s |\n", subnetMaskLengthRequired, subnet, startAddress, endAddress, broadcastAddress, subnetClass, subnetSize);
System.out.println("+---------------+------------------------+------------------------+------------------------+------------------------+------------------+----------------------+");
```
请注意,此代码假定您已经定义并初始化了变量subnetMaskLengthRequired、subnet、startAddress、endAddress、broadcastAddress、subnetClass和subnetSize。