1. 程式人生 > >dotnet core 中數值溢出

dotnet core 中數值溢出

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 中數值溢出