整數的數字型別- C# 參考
文章推薦指數: 80 %
int a = 123; System.Int32 b = 123;. 資料表 nint 最後兩個數據列中的和 nuint 類型是原生大小的整數。
從C# 9.0 開始,您可以使用 nint 和 nuint ...
跳到主要內容
已不再支援此瀏覽器。
請升級至MicrosoftEdge,以利用最新功能、安全性更新和技術支援。
下載MicrosoftEdge
其他資訊
目錄
結束焦點模式
閱讀英文
儲存
目錄
閱讀英文
儲存
Twitter
LinkedIn
Facebook
電子郵件
目錄
C#參考(整數型別)
發行項
06/23/2022
4位參與者
本文內容
整數數數值型別代表整數數位。
所有整數數數值型別都是實值型別。
它們也是簡單的類型,而且可以使用常值初始化。
所有整數數數值型別都支援算術、位邏輯、比較和等號比較運算子。
整數型別的特性
C#支援下列預先定義的整數型別:
C#型別/關鍵字
範圍
大小
.NET類型
sbyte
-128到127
帶正負號的8位元整數
System.SByte
byte
0至255
不帶正負號的8位元整數
System.Byte
short
-32,768至32,767
帶正負號的16位元整數
System.Int16
ushort
0到65,535
不帶正負號的16位元整數
System.UInt16
int
-2,147,483,648至2,147,483,647
帶正負號的32位元整數
System.Int32
uint
0到4,294,967,295
不帶正負號的32位元整數
System.UInt32
long
-9,223,372,036,854,775,808至9,223,372,036,854,775,807
帶正負號的64位元整數
System.Int64
ulong
0到18,446,744,073,709,551,615
不帶正負號的64位元整數
System.UInt64
nint
取決於在執行時間計算的平臺()
帶正負號的32位或64位整數
System.IntPtr
nuint
取決於在執行時間計算的平臺()
不帶正負號的32位或64位整數
System.UIntPtr
在最後兩個以外的所有資料表資料列中,最左邊資料行中的每個C#類型關鍵字都是對應.NET類型的別名。
關鍵字和.NET類型名稱可交換。
例如,下列宣告會宣告相同型別的變數:
inta=123;
System.Int32b=123;
資料表nint最後兩個數據列中的和nuint類型是原生大小的整數。
從C#9.0開始,您可以使用nint和nuint關鍵字來定義原生大小的整數。
在32位進程中執行時,這些是32位整數,或在64位進程中執行時為64位整數。
它們可用於Interop案例、低階程式庫,以及在廣泛使用整數數學的案例中優化效能。
原生大小的整數類型會在內部表示為.NET型別System.IntPtr和System.UIntPtr。
從C#11開始,nint和nuint型別是基礎類型的別名。
每個整數型別的預設值都是零(0)。
每個整數型別都有MinValue和MaxValue屬性,可提供該型別的最小值和最大值。
這些屬性是編譯時間常數,但原生大小類型的大小nint(和nuint)除外。
MinValue和MaxValue屬性會在執行時間計算原生大小類型。
這些類型的大小取決於處理器。
使用System.Numerics.BigInteger結構來表示帶正負號的整數,無上下限。
整數常值
整數常值可以是
decimal:不含任何前置詞
十六進位:具有0x或0X前置詞
binary:具有0bC#7.0和更新版本中提供的或0B前置詞()
下列程式碼示範每個範例:
vardecimalLiteral=42;
varhexLiteral=0x2A;
varbinaryLiteral=0b_0010_1010;
上述範例也會示範使用_做為數位分隔符號,從C#7.0開始支援。
您可以使用數位分隔符號搭配所有類型的數值常值。
整數常值的類型取決於其後綴,如下所示:
如果常值沒有後置詞,則其型別為下列類型的第一個類型,其值可以表示:int、、uint、long、ulong。
注意
常值會解譯為正值。
例如,常值0xFF_FF_FF_FF代表類型的數目4294967295uint,不過其位表示方式與類型的數目-1int相同。
如果您需要特定類型的值,請將常值轉換成該類型。
unchecked如果目標型別中無法表示常值,請使用運算子。
例如,unchecked((int)0xFF_FF_FF_FF)產生-1。
如果常值後面U加上或u,則其型別是下列類型的第一個類型,其中可以表示其值:uint、ulong。
如果常值後面L加上或l,則其型別是下列類型的第一個類型,其中可以表示其值:long、ulong。
注意
您可以使用小寫字母l做為尾碼。
不過,這會產生編譯器警告,因為字母l可能會與數位1混淆。
為了清楚起見,請使用L。
如果常值尾碼UL為、Ul、uL、、LuLUlUul、、或lu,則其類型為。
ulong
如果整數常值所代表的值超出UInt64.MaxValue,就會發生編譯錯誤CS1021。
如果整數常值的判定型別是int,而常值所代表的值是在目的地型別的範圍內,則可以隱含地將值轉換成sbyte、byte、、short、、ushortulonguint、nint或:nuint
bytea=17;
byteb=300;//CS0031:Constantvalue'300'cannotbeconvertedtoa'byte'
如上述範例所示,如果常值的值不在目的地類型的範圍內,則會發生編譯器錯誤CS0031。
您也可以使用轉換,將整數常值所代表的值轉換成常數值型別以外的類型:
varsignedByte=(sbyte)42;
varlongVariable=(long)42;
轉換
您可以將任何整數數數值型別轉換成任何其他整數數數值型別。
如果目的地類型可以儲存來源類型的所有值,則轉換是隱含的。
否則,您必須使用轉換運算式來執行明確的轉換。
如需詳細資訊,請參閱內建數值轉換。
原生大小的整數
原生大小的整數類型具有特殊行為,因為儲存體是由目的電腦上的自然整數大小所決定。
若要在執行時間取得原生大小的整數大小,您可以使用sizeof()。
不過,程式碼必須在不安全的內容中編譯。
例如:
Console.WriteLine($"sizeofnint={sizeof(nint)}");
Console.WriteLine($"sizeofnuint={sizeof(nuint)}");
//outputwhenrunina64-bitprocess
//sizeofnint=8
//sizeofnuint=8
//outputwhenrunina32-bitprocess
//sizeofnint=4
//sizeofnuint=4
您也可以從靜態IntPtr.Size和UIntPtr.Size屬性取得對等的值。
若要在執行時間取得原生大小整數的最小值和最大值,請使用MinValue和MaxValue作為具有和nuint關鍵字的靜態屬性nint,如下列範例所示:
Console.WriteLine($"nint.MinValue={nint.MinValue}");
Console.WriteLine($"nint.MaxValue={nint.MaxValue}");
Console.WriteLine($"nuint.MinValue={nuint.MinValue}");
Console.WriteLine($"nuint.MaxValue={nuint.MaxValue}");
//outputwhenrunina64-bitprocess
//nint.MinValue=-9223372036854775808
//nint.MaxValue=9223372036854775807
//nuint.MinValue=0
//nuint.MaxValue=18446744073709551615
//outputwhenrunina32-bitprocess
//nint.MinValue=-2147483648
//nint.MaxValue=2147483647
//nuint.MinValue=0
//nuint.MaxValue=4294967295
您可以在下列範圍內使用常數值:
針對nint:Int32.MinValue至Int32.MaxValue。
針對nuint:UInt32.MinValue至UInt32.MaxValue。
編譯器提供對其他數數值型別的隱含和明確轉換。
如需詳細資訊,請參閱內建數值轉換。
原生大小的整數常值沒有直接語法。
沒有後置詞表示常值是原生大小的整數,例如L表示long。
您可以改用其他整數值的隱含或明確轉換。
例如:
ninta=42
ninta=(nint)42;
C#語言規格
如需詳細資訊,請參閱C#語言規格的下列幾節:
整數型別
整數常值
另請參閱
C#參考資料
值類型
浮點類型
標準數值格式字串
.NET中的數值
本文內容
延伸文章資訊
- 1C陣列
上面例子裡的y陣列大小,是由後面{}裡元素的個數決定。int a[]並沒有分配儲存陣列內容的空間,因此可視為指標宣告。 引用方式:. 陣列名稱[索引值].
- 2C 中int a[] 和int*a 有什么区别? - 知乎
- 3int (*a)(int),重點介紹指針數組與數組指針- c/c++ - 台部落
int a[3][4]; int (*p)[4]; p=a; //也可以爲p=&a[0];. 其中* ( *(p+i)+j)表示任意一個i行j列的元素。 多說一句,其實訪問 ...
- 4C語言int a 是什麼意思 - 迪克知識網
c語言inta 是什麼意思,C語言int a 是什麼意思,1樓非常可愛int a的時候,編譯器不會給a分配記憶體空間,因為它只是另一個變數的標記a是存放a的記憶體 ...
- 5What is a diference between ((int) a) and (int(a))?
c++ - int a = 0 and int a(0) differences - Stack Overflow