dotnet core 中數值溢出
阿新 • • 發佈:2018-07-31
clas class hose ger value .net cor long calc
.net core中使用C#的int類型,存在數值上下限範圍,如下:
int max = int.MaxValue; int min = int.MinValue; Console.WriteLine($"The range of integers is {min} to {max}");
運行得到結果
The range of integers is -2147483648 to 2147483647
此時如果執行以下代碼
int what = max + 3; Console.WriteLine($"An example of overflow: {what}");
得到範圍結果是
An example of overflow: -2147483646
很奇怪,執行max+3得到結果成了min+2
查詢官方教程
If a calculation produces a value that exceeds those limits, you have an underflow or overflow condition.
如果計算產生的值超過這些限制,則會出現下溢或溢出情況。
max+3發生了下溢,則變為min+2了。
這在Python中卻是另外一種光景
import sys print sys.maxint
得到最大值2147483647
然執行以下
print sys.maxint+3
得到2147483650
看到沒,沒有溢出,原來Python在int超出最大值後,自動將之轉為long類型,所以就不存在溢出了,只要內存足夠大。
dotnet core 中數值溢出