为什么会出现整数溢出?

时间:2009-02-23 15:26:16

标签: .net integer-overflow

我已经包装了一个dll方法,该方法在Web服务中有一个整数作为out参数。 在测试中,我发现当我期待-1时,我得到的是65,535。我意识到dll使用的是16位整数,我在代码中引用外部dll时指定了标准的.NET 32位整数。通过指定一个16位整数很快就可以解决这个问题。一切都很好。

我的问题是为什么会这样?如果我试图在16位整数中拟合一个32位整数,我可以理解发生溢出但是我不太确定为什么这会发生反过来。很明显,我对类型之间的类型铸造的理解有点缺乏,因此任何指导都会受到高度赞赏。

2 个答案:

答案 0 :(得分:6)

16位整数“-1”设置全部16位。如果设置32位整数的低16位,则值为65,535。有关否定整数的内部表示的解释,请查看this article

答案 1 :(得分:2)

这是因为类型转换。

你实际上并没有在调用堆栈上发送16位整数 - 它们仍然是32位。那么,完全返回的DLL是:

0x0000ffff

如果你将其转换为例如sint16,这是-1,但如果这是32位,则为65535