簡體   English   中英

int是64位C#中的64位整數嗎?

[英]Is an int a 64-bit integer in 64-bit C#?

在我的C#源代碼中,我可能將整數聲明為:

int i = 5;

要么

Int32 i = 5;

在當前流行的32位環境中,它們是等效的。 但是,當我們進入64位世界時,我是否正確地說以下內容將是相同的?

int i = 5;
Int64 i = 5;

否。C#規范嚴格地將int定義為System.Int32的別名,其位數恰好為32位。 更改此設置將是重大的重大更改。

C#中的int關鍵字被定義為System.Int32類型的別名,並且(根據名稱判斷)它是32位整數。 規格:

CLI規范的第8.2.2節(內置值和引用類型)具有一個包含以下內容的表:

  • System.Int32符號的32位整數

C#規范第8.2.1節(預定義類型)具有類似的表:

  • int -32位有符號整數類型

這樣可以保證CLR中的System.Int32和C#中的int始終為32位。

sizeof(testInt)會是8嗎?

否,sizeof(testInt)是錯誤。 testInt是局部變量。 sizeof運算符需要一個類型作為其參數。 永遠不會是8,因為它將始終是錯誤。

VS2010甚至在64位計算機上也將ac#托管整數編譯為4個字節。

正確。 我注意到C#規范的18.5.8節將sizeof(int)定義為編譯時常量4。也就是說,當您說sizeof(int) ,編譯器將其簡單地替換為4;否則,編譯器將其替換為4。 就像您在源代碼中說“ 4”一樣。

有誰知道何時/何時將C#中的標准“ int”設為64位?

決不。 C#規范的第4.1.4節指出“ int”是“ System.Int32”的同義詞。

如果您要的是“指針大小的整數”,請使用IntPtr。 IntPtr在不同的體系結構上更改其大小。

在所有平台上, int始終都是Int32同義詞。

Microsoft極不可能在將來更改它,因為它將破壞許多現有的假定int是32位的代碼。

我認為您可能會感到困惑的是, intInt32的別名,因此它將始終為4個字節,但是IntPtr假定與CPU體系結構的字長匹配,因此在32位系統上它將為4個字節,在64位系統上為8個字節。

根據C#規范ECMA-334的 “ 11.1.4簡單類型”部分,保留字int將別名為System.Int32 由於這是規范中的內容,因此更改的可能性很小。

無論您使用CLR的32位版本還是64位版本,在C#中int始終表示System.Int32long始終表示System.Int64

在C#中,以下始終是正確的

sbyte帶符號的8位,1字節

字節無符號8位,1字節

符號16位,2字節

ushort無符號16位,2字節

int有符號32位,4字節

uint無符號32位,4字節

長帶符號的64位8字節

ulong無符號64位,8字節

整數文字只是數字序列(例如314159 ), 沒有任何這些顯式類型。 C#為其分配適合的序列中的第一個類型( intuintlongulong )。 至少在上述回復之一中,似乎有些混淆。

奇怪的是,在一串數字之前出現的一元減號 (減號) 不會將選擇減小為( intlong )。 字面量始終為正; 減號確實是一個運算符。 因此,大概-314159-((int)314159) 完全相同 顯然,有一種特殊情況可以將-2147483648直接轉化為一個int 否則為-((uint)2147483648) 我認為這樣做會令人不快。

以某種方式可以肯定地預測C#(和朋友)將永遠不會為大於等於128位整數的“ squishy name”類型而煩惱。 一旦處理器支持進行寬泛的數學運算,並且幾乎從未使用過它,我們將獲得對任意大整數的良好支持以及對UInt128,UInt256等的超精確支持。 64位地址空間確實很大。 如果它們太小,則出於某種深奧的原因,例如ASLR或更有效的MapReduce或其他原因。

是的,正如喬恩所說,與“ C / C ++世界”不同,Java和C#並不依賴於它們所運行的系統。 它們對字節/短/整數/長和單精度/雙精度浮點數具有嚴格定義的長度,在每個系統上均相等。

不帶后綴的int可以是32位或64位,這取決於它表示的值。

如MSDN中所定義:

當整數文字沒有后綴時,其類型是這些類型中可以表示其值的第一個類型:int,uint,long,ulong。

這是地址: https : //msdn.microsoft.com/zh-cn/library/5kzh1b5w.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM