一个关于浮点数的有趣的问题

本文探讨了Java中1/0和1.0/0.0表达式的值,并解释了整数除零会引发异常,而浮点数除零则返回无穷大。深入介绍了IEEE754浮点数标准,以及在Java中的具体表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问    Java表达式1/0和1.0/0.0的值是什么?

答      在计算机内部,整数的表示使用补码表示,当被除数为0时,执行该操作的处理器会产生除零异常,在Java语言层面,

        将产生除零异常。

         而浮点数的表示,我们以常用的X86/X64处理器为例,在处理器内部以IEEE754表示,该表示法最初由伯克利分校受

       英特尔公司委托研发,现在已经成为一个事实上的计算机内部浮点数表示标准。

          IEEE754标准采用科学指数计数法表示浮点数,在内存或者寄存器内部,浮点数的表示分为三部分,1位符号位,

        8位指数位,23位小数部分的尾数位。

          

         我们令S=f1(s), E=f2(e), M=f3(m), 则

         浮点数的计算公式为float = (-1)S * (1.M) 2(E), 即-1的S次方,1.M和2的E次方的乘积.

         对于e, 当e!=0且e!=255时,称为浮点数的规范表示,

         S=s, E=e-127, M左侧隐含有1为1.m, 

         当e==0或者e==255时,称为浮点数的非规范表示,

         e==0, 此时,S=s, E=1-127, M左侧没有隐含的1.表示非常接近0的实数,当M等于0时,依据符号位

         +0.0, -0.0.

         e==255,此时,S=s, E=e-127, 如果M为0, 则依据符号位表示+infinite,-infinite。如果M不为0,则表示

         Not a number(NaN), 比如sqrt(-1).

        对于浮点数0.0参与的运算,IEEE754有相关的规定,k/0.0等于infinite,

        测试代码:

        package myAlgoth;
        public class myMain {
    public myMain() {
// TODO Auto-generated constructor stub
    }
    public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.printf("%d\n", 1/0);


System.out.printf("%f", 1.0/0.0); 

    }
       }

       结果:

       1. Exception in thread "main" java.lang.ArithmeticException: / by zero
at myAlgoth.myMain.main(myMain.java:8)

       2. Infinity

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值