2017-02-26 43 views
2

我在我的課上有以下聲明。爲什麼編譯器抱怨變量是在長數據類型的範圍內

public class MyClass 
{ 
    private const long SOME_VALUE= (10 * 1024 * 1024 * 1024); // 10 GB 
    .... 
} 

但是編譯器報告以下錯誤

錯誤CS0220:該操作在檢查模式

在編譯時溢出據MSDN

enter image description here

據我所知,SOME_VALUE在這個範圍內類型。任何想法,爲什麼我得到這個編譯時錯誤?

回答

4

計算中的每個單獨值都是int,因此編譯器將它們放在一起作爲int s,因此溢出。最簡單的辦法是,以紀念一個或使用L suffix所有的人都爲long,這將迫使計算做一個long

private const long SOME_VALUE= 10L * 1024 * 1024 * 1024; 
2

添加L後綴:

public class MyClass 
{ 
    private const long SOME_VALUE= (10L * 1024L * 1024L * 1024L); // 10 GB 
    .... 
} 

沒有L後綴(代表long)編譯器將表達式視爲int之一,並警告整數溢出。

相關問題