我在我的課上有以下聲明。爲什麼編譯器抱怨變量是在長數據類型的範圍內
public class MyClass
{
private const long SOME_VALUE= (10 * 1024 * 1024 * 1024); // 10 GB
....
}
但是編譯器報告以下錯誤
錯誤CS0220:該操作在檢查模式
在編譯時溢出據MSDN。
據我所知,SOME_VALUE在這個範圍內長類型。任何想法,爲什麼我得到這個編譯時錯誤?
我在我的課上有以下聲明。爲什麼編譯器抱怨變量是在長數據類型的範圍內
public class MyClass
{
private const long SOME_VALUE= (10 * 1024 * 1024 * 1024); // 10 GB
....
}
但是編譯器報告以下錯誤
錯誤CS0220:該操作在檢查模式
在編譯時溢出據MSDN。
據我所知,SOME_VALUE在這個範圍內長類型。任何想法,爲什麼我得到這個編譯時錯誤?
計算中的每個單獨值都是int
,因此編譯器將它們放在一起作爲int
s,因此溢出。最簡單的辦法是,以紀念一個或使用L
suffix所有的人都爲long
,這將迫使計算做一個long
:
private const long SOME_VALUE= 10L * 1024 * 1024 * 1024;
添加L
後綴:
public class MyClass
{
private const long SOME_VALUE= (10L * 1024L * 1024L * 1024L); // 10 GB
....
}
沒有L
後綴(代表long
)編譯器將表達式視爲int
之一,並警告整數溢出。