Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Jenis numerik integral mewakili angka bilangan bulat. Semua jenis numerik integral adalah jenis nilai. Jenis integral adalah jenis sederhana dan dapat diinisialisasi dengan literal. Semua jenis numerik integral mendukung operator aritmatika, logis bitwise, perbandingan, dan kesetaraan .
Karakteristik jenis integral
C# mendukung jenis integral yang telah ditentukan sebelumnya berikut:
| Jenis/kata kunci C# | Jangkauan | Ukuran | Jenis .NET |
|---|---|---|---|
sbyte |
-128 hingga 127 | Bilangan bulat 8-bit yang ditandatangani | System.SByte |
byte |
0 hingga 255 | Bilangan bulat 8-bit yang tidak ditandatangani | System.Byte |
short |
-32.768 hingga 32.767 | Bilangan bulat 16-bit yang ditandatangani | System.Int16 |
ushort |
0 hingga 65.535 | Bilangan bulat 16-bit yang tidak ditandatangani | System.UInt16 |
int |
-2.147.483.648 menjadi 2.147.483.647 | Bilangan bulat 32-bit yang ditandatangani | System.Int32 |
uint |
0 hingga 4.294.967.295 | Bilangan bulat 32-bit tidak ditandatangani | System.UInt32 |
long |
-9.223.372.036.854.775.808 menjadi 9.223.372.036.854.775.807 | Bilangan bulat 64-bit yang ditandatangani | System.Int64 |
ulong |
0 hingga 18.446.744.073.709.551.615 | Bilangan bulat 64-bit yang tidak ditandatangani | System.UInt64 |
nint |
Bergantung pada platform (dihitung saat runtime) | Bilangan bulat 32-bit atau 64-bit yang ditandatangani | System.IntPtr |
nuint |
Bergantung pada platform (dihitung saat runtime) | Bilangan bulat 32-bit atau 64-bit yang tidak ditandatangani | System.UIntPtr |
Di semua baris tabel kecuali dua terakhir, setiap kata kunci jenis C# dari kolom paling kiri adalah alias untuk jenis .NET yang sesuai. Kata kunci dan nama jenis .NET dapat dipertukarkan. Misalnya, deklarasi berikut mendeklarasikan variabel dengan jenis yang sama:
int a = 123;
System.Int32 b = 123;
Jenis nint dan nuint dalam dua baris terakhir tabel adalah bilangan bulat berukuran asli. Anda dapat menggunakan nint kata kunci kontekstual dan nuint untuk menentukan bilangan bulat berukuran asli. Bilangan bulat berukuran asli adalah bilangan bulat 32-bit saat berjalan dalam proses 32-bit, atau bilangan bulat 64-bit saat berjalan dalam proses 64-bit. Mereka dapat digunakan untuk skenario interop, pustaka tingkat rendah, dan untuk mengoptimalkan performa dalam skenario di mana matematika bilangan bulat digunakan secara ekstensif.
Jenis bilangan bulat berukuran asli diwakili secara internal sebagai jenis .NET System.IntPtr dan System.UIntPtr. Jenis nint dan nuint adalah alias untuk jenis yang mendasar.
Nilai default dari setiap jenis integral adalah nol, 0.
Masing-masing jenis integral memiliki MinValue properti dan MaxValue yang memberikan nilai minimum dan maksimum dari jenis tersebut. Properti ini adalah konstanta saat waktu kompilasi kecuali untuk tipe ukuran asli (nint dan nuint). Properti MinValue dan MaxValue dihitung pada runtime untuk tipe berukuran asli. Ukuran jenis tersebut bergantung pada pengaturan proses.
System.Numerics.BigInteger Gunakan struktur untuk mewakili bilangan bulat bertanda tangan tanpa batas atas atau bawah.
Literal integer
Literal integer dapat
- desimal: tanpa awalan apa pun
-
heksadesimal: dengan awalan
0xatau0X -
biner: dengan awalan
0batau0B
Kode berikut menunjukkan contoh masing-masing:
var decimalLiteral = 42;
var hexLiteral = 0x2A;
var binaryLiteral = 0b_0010_1010;
Contoh sebelumnya juga menunjukkan penggunaan _ sebagai pemisah digit. Anda dapat menggunakan pemisah digit dengan semua jenis literal numerik.
Akhiran menentukan jenis bilangan bulat harfiah sebagai berikut:
Jika literal tidak memiliki akhiran, jenisnya adalah yang pertama dari jenis berikut di mana nilainya dapat diwakili:
int, ,uintlong,ulong.Nota
Literal ditafsirkan sebagai nilai positif. Misalnya, literal
0xFF_FF_FF_FFmewakili jumlah4294967295jenisuint, meskipun memiliki representasi bit yang sama dengan jumlah-1jenisint. Jika Anda memerlukan nilai jenis tertentu, ubah literal menjadi jenis tersebut.uncheckedGunakan operator, jika nilai harfiah tidak dapat diwakili dalam jenis target. Misalnya,unchecked((int)0xFF_FF_FF_FF)menghasilkan-1.Jika literal menyertakan akhiran
Uatauu, jenisnya adalah yang pertama dari jenis berikut di mana nilainya dapat diwakili:uint,ulong.Jika literal menyertakan akhiran
Lataul, jenisnya adalah yang pertama dari jenis berikut di mana nilainya dapat diwakili:long,ulong.Nota
Anda dapat menggunakan huruf
lkecil sebagai akhiran. Namun,lmenghasilkan peringatan kompilator karena hurufldapat dikacaukan dengan digit1. GunakanLuntuk kejelasan.Jika harfiah mencakup salah satu akhiran
UL, ,Ul,LUuLul,Lu,lU, atau , ataulu, jenisnya adalahulong.
Jika nilai yang diwakili oleh bilangan bulat harfiah melebihi UInt64.MaxValue, kesalahan pengkompilasi CS1021 terjadi.
Jika jenis bilangan bulat yang ditentukan harfiah adalah int dan nilai yang diwakili oleh literal berada dalam rentang jenis tujuan, nilai dapat secara implisit dikonversi ke sbyte, , byte, ushortshort, uint, ulong, nintatau nuint:
byte a = 17;
byte b = 300; // CS0031: Constant value '300' cannot be converted to a 'byte'
Seperti yang ditunjukkan contoh sebelumnya, jika nilai harfiah tidak berada dalam rentang jenis tujuan, kesalahan pengkompilasi CS0031 terjadi.
Anda juga dapat menggunakan cast untuk mengonversi nilai yang diwakili oleh literal bilangan bulat ke jenis lain selain jenis yang ditentukan oleh literal tersebut.
var signedByte = (sbyte)42;
var longVariable = (long)42;
Konversi
Anda dapat mengonversi jenis numerik integral apa pun ke jenis numerik integral lainnya. Jika jenis tujuan dapat menyimpan semua nilai jenis sumber, konversinya implisit. Jika tidak, Anda perlu menggunakan ekspresi cast untuk melakukan konversi eksplisit. Untuk informasi selengkapnya, lihat Konversi numerik bawaan.
Integer dengan ukuran asli
Jenis bilangan bulat berukuran asli memiliki perilaku khusus karena penyimpanan cocok dengan ukuran bilangan bulat alami pada komputer target.
Untuk mendapatkan ukuran bilangan bulat dengan ukuran aslinya pada run time, Anda dapat menggunakan
sizeof(). Namun, kode harus dikompilasi dalam konteks yang tidak aman. Contohnya:Console.WriteLine($"size of nint = {sizeof(nint)}"); Console.WriteLine($"size of nuint = {sizeof(nuint)}"); // output when run in a 64-bit process //size of nint = 8 //size of nuint = 8 // output when run in a 32-bit process //size of nint = 4 //size of nuint = 4Anda juga bisa mendapatkan nilai setara dari properti statis IntPtr.Size dan UIntPtr.Size.
Untuk mendapatkan nilai minimum dan maksimum bilangan bulat berukuran asli pada waktu proses, gunakan
MinValuedanMaxValuesebagai properti statis dengannintkata kunci dannuint, seperti dalam contoh berikut:Console.WriteLine($"nint.MinValue = {nint.MinValue}"); Console.WriteLine($"nint.MaxValue = {nint.MaxValue}"); Console.WriteLine($"nuint.MinValue = {nuint.MinValue}"); Console.WriteLine($"nuint.MaxValue = {nuint.MaxValue}"); // output when run in a 64-bit process //nint.MinValue = -9223372036854775808 //nint.MaxValue = 9223372036854775807 //nuint.MinValue = 0 //nuint.MaxValue = 18446744073709551615 // output when run in a 32-bit process //nint.MinValue = -2147483648 //nint.MaxValue = 2147483647 //nuint.MinValue = 0 //nuint.MaxValue = 4294967295Meskipun rentang
nintpenuh dannuintbisa lebih besar, konstanta waktu kompilasi dibatasi ke rentang 32-bit:- Untuk
nint: Int32.MinValue ke Int32.MaxValue. - Untuk
nuint: UInt32.MinValue ke UInt32.MaxValue.
- Untuk
Pengkompilasi menyediakan konversi implisit dan eksplisit ke jenis numerik lainnya. Untuk informasi selengkapnya, lihat Konversi numerik bawaan.
Tidak ada sintaks langsung untuk literal bilangan bulat berukuran asli. Tidak ada akhiran untuk menunjukkan bahwa literal adalah bilangan bulat berukuran asli, seperti
Luntuk menunjukkanlong. Anda dapat menggunakan cast implisit atau eksplisit dari nilai bilangan bulat lainnya sebagai gantinya. Contohnya:nint a = 42 nint a = (nint)42;
Spesifikasi bahasa C#
Untuk informasi selengkapnya, lihat bagian berikut dari spesifikasi bahasa C#: