当前位置:  开发笔记 > 编程语言 > 正文

C#和Java规范是否在有符号整数溢出时拼出相同的行为?

如何解决《C#和Java规范是否在有符号整数溢出时拼出相同的行为?》经验,为你挑选了0个好方法。

在C和C++中,未定义有符号整数上溢或下溢的行为.

在Java和C#(未经检查的上下文)中,行为似乎在某种程度上被定义.


从Java规范,我们有:

整数运算符不以任何方式指示上溢或下溢.

和:

Java编程语言对整数使用二进制补码表示[...]


从C#规范,我们有:

[...]在未经检查的上下文中,忽略溢出,并且丢弃不适合目标类型的任何高位.


通过测试两者,我得到了预期的环绕结果.从规范的措辞来看,我感觉在Java中结果是可移植的(因为语言需要2的补码表示),而C#可能有也可能没有结果(因为它似乎没有指定表示 - 只有高阶位被丢弃).

那么,两种语言规范是否都能在所有平台上保证相同的行为(只是用不同的措辞)?或者他们在我的测试用例中(在x86上和Sun的JRE和Microsoft的.NET下)恰好相同,但理论上在其他架构或实现方面可能有所不同吗?

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有