[英]Multiplication issue with Visual Studio debugger for C#
如果我在C#調試器的監視窗口中輸入174 * 256 * 256 * 256,結果是
-1375731712。 我認為它與256有關,但我很感激一點指導。
謝謝!!
不,與256無關。這只是乘法的結果大於最大可能的有符號32位整數,所以你得到了溢出。
試試這個:
174L * 256L * 256L * 256L
這些是64位整數文字。
它執行unchecked
溢出(因此溢出無錯誤)。 想象如下:Int32.MaxValue + 1 == Int32.MinValue,但有乘法。
這解釋了如何在內存http://en.wikipedia.org/wiki/Two's_complement中表示int
嘗試輸入:
174 * 256 * 256 * 256f
所以結果不會被轉換為整數,而是浮動。
您正面臨整數溢出。 如果你想在沒有限制的情況下使用大數字(當然除了可用內存),你可以使用System.Numerics.BigInteger
。 在你的特殊情況下, long
也可以(64位整數)
你正在溢出整數。 實際答案是2,919,235,584,但只有2,147,483,647可以表示為有符號整數。 考慮一個unsigned int(uint),一個long,一個ulong,或者如果它不夠大。 對於監視窗口,您可能需要轉換第一個參數或使用后綴,例如174L * 256L * 256L * 256L
這是一個簡單的溢出。 嘗試在觀察窗口中輸入:
(uint)(174 * 256 * 256 * 256)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.