我了解到(在Java中是这样的)整数/长值会静默溢出,并且它们的值将从溢出时的最小值开始,而不是引发任何异常。
我使用外部API进行某些文件操作,其中从属性文件加载了最大文件大小。在我的本地测试环境中,一切都很好。代码进入实时环境后,最大文件大小限制根本不起作用。经过两天的调试/分析代码,根本没有成功。然后出于其他一些原因,我使用了live
constants.properties文件,并使用该文件调试了代码。o_0
我只是想问,是什么阻止了他们在溢出时引发异常?
在许多情况下,Java基于C或C
,而这些都是基于Assembly。上溢/下溢在C和C
中是无声的,而在汇编中几乎是无声的(除非您检查特殊标志)。这可能是由于C和C
++最初提出时没有例外。如果要查看上溢/下溢,可以使用更大的类型。例如long long int
或long double
;)BTW程序集具有类似于陷阱或中断的异常,上溢/下溢不会导致陷阱AFAIK。
我更喜欢做的是使用long
,double
除非我确定这些类型比需要的大得多。您不能拥有long
大小溢出的设备。
未定义行为的一个例子是在flow上的整数行为 有没有一个历史的或者(甚至更好!)造成这种差异的技术原因是什么?
问题内容: 在回答了这个问题之后,我很困惑为什么这段代码中的整数溢出而不是负数。奇怪,为什么这么精确的数字?为什么是0? 输出: 问题答案: 仅当的起始值为偶数时,才会发生这种情况。 根据JLS§15.17.1: 如果整数乘法溢出,则结果是数学乘积 的低阶位 ,以某种足够大的二进制补码格式表示。结果,如果发生溢出,则结果的符号可能与两个操作数值的数学积的符号不同。 如果我们以二进制格式而不是十进制
问题内容: 当整数溢出发生而不是静默失败时,是否可能引发某种运行时异常。例如 由于溢出而打印,我想得到某种运行时异常 问题答案: 是的,从Java-8开始,您可以使用新的Exact方法,它将在溢出时引发异常(java.lang.ArithmeticException:整数溢出)。例如
问题内容: 在Java中,hashcode()方法返回整数而不是long。有什么具体原因吗? 问题答案: 那么,一个良好的理由是,基于数据结构(,)使用一个数组来存储箱,并且阵列被限制为索引。 如果必须将其映射到数组索引,那么您将一无所获。
根据Stevens(图示为TCP/IP),traceroute程序用增量TTL(1、2、3等)向目的主机发送UDP数据包,以从ICMP TTL过期消息中获取中间跳信息。 “到达目的地”条件是ICMP端口无法到达的消息,因为traceroute寻址的随机端口数量很高(也就是说,不太可能有人在那里监听) 所以我的问题是:是否有技术原因(缺点、RFCs等)使用UDP数据包而不使用例如ICMP回送请求消息
在阅读参考资料时。com文档中的std::numeric_limits,我遇到了以下声明: 还提供了所有整数类类型的专门化。(从20世纪开始) 我的问题是,我们在上面的语句中所说的整数类类型是什么意思。我的意思是,我知道是C中的内置类型。我们可以在C中提供用户定义的类。但是我从来没有读过关于整数类类型的文章。我试着在谷歌上搜索这个短语,但是没有找到任何与此相关的东西。