本文主要是介绍0做除数时,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
试着编译运行下面的几行小程序:
正常编译后,运行发生了异常,程序被终止运行,啥也没打印出来。当然问题也是显然的,严重的除0异常。(没有人会写程序故意除以一个零,但难保来自于其它输入渠道的数据不会导致一个0除数。这里只是个例子,就简单写写了。)
我们再把程序稍微改动一点:
只有一处改动:被除数由“3”变成“3.0”。
结果却有所不同。当然,要说不正常结果依旧是不正常。但这次却不是严重的终止了程序的运行时异常,程序本身是正常运行的,而且有结果输出,只不过输出了一个怪怪的东西,标示这个浮点数有问题。
前后的区别在于:在第一种情况下,是两个整数相除,当除数为0时产生一个严重的除0异常,程序被终止运行;在第二种情况下,由于除法运算的第一个操作数为double型,那么除数a也被先提升为double型然后参与运算。浮点运算中,除0错误的结果不是一个运行时异常,而是得到一个“Not A Number”的特殊浮点值作为结果,当这个值被打印时就输出了那个怪怪的东西。
可以联想到的一件事情是:float/double类型是有这种特殊值的,这一点不像各种int类型。一个int,32个bit,不管怎么组合,其结果都是一个合法的int值。但float/double不同,float的32个bit或者double的64个bit,并非每种组合都是合法的。因此通过某种方式随意组织32个bit,来试图形成一个“float随机数”的想法是不正确的。
这篇关于0做除数时的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!