2009-02-23 59 views
3

我已經包裝了一個dll方法,它具有一個整數作爲Web服務中的out參數。 在測試中,我發現當我期待-1時,我得到了65,535。我意識到dll使用了16位整數,並且在我的代碼中引用外部dll時指定了標準的.NET 32位整數。這是通過指定一個16位整數很快被修復的,一切都很好。爲什麼這個整數溢出發生?

我的問題是爲什麼發生這種情況?我可以理解一個溢出發生,如果我試圖適應一個16位整數的32位整數,但我不知道爲什麼會發生這種情況。很明顯,我對這種類型的類型之間的類型的理解有點缺乏,因此任何指導都將不勝感激。

回答

6

16位整數「-1」全部設置了16位。如果設置32位整數的低16位,則值爲65,535。有關負整數的內部表示形式的解釋,請參閱this article

+0

@Paul - 感謝您的解釋和鏈接。他們一起很好地解釋了它。 – 2009-02-23 15:36:39

2

這是因爲類型轉換而發生的。

你實際上並沒有在調用堆棧上發送16位整數 - 它們仍然是32位。那麼什麼DLL返回正是是:

0x0000ffff 

如果你施放此來如sint16,這是-1,但如果這是32位,這是65535