Bagikan melalui


Jenis numerik integral (referensi C#)

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 0x atau 0X
  • biner: dengan awalan 0b atau 0B

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_FF mewakili jumlah 4294967295 jenis uint , meskipun memiliki representasi bit yang sama dengan jumlah -1 jenis int . Jika Anda memerlukan nilai jenis tertentu, ubah literal menjadi jenis tersebut. unchecked Gunakan operator, jika nilai harfiah tidak dapat diwakili dalam jenis target. Misalnya, unchecked((int)0xFF_FF_FF_FF) menghasilkan -1.

  • Jika literal menyertakan akhiran U atau u , jenisnya adalah yang pertama dari jenis berikut di mana nilainya dapat diwakili: uint, ulong.

  • Jika literal menyertakan akhiran L atau l , jenisnya adalah yang pertama dari jenis berikut di mana nilainya dapat diwakili: long, ulong.

    Nota

    Anda dapat menggunakan huruf l kecil sebagai akhiran. Namun, l menghasilkan peringatan kompilator karena huruf l dapat dikacaukan dengan digit 1. Gunakan L untuk kejelasan.

  • Jika harfiah mencakup salah satu akhiran UL, , Ul, LUuLul, Lu, lU, atau , atau lu , jenisnya adalah ulong.

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 = 4
    

    Anda 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 MinValue dan MaxValue sebagai properti statis dengan nint kata kunci dan nuint , 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 = 4294967295
    
  • Meskipun rentang nint penuh dan nuint bisa lebih besar, konstanta waktu kompilasi dibatasi ke rentang 32-bit:

  • 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 L untuk menunjukkan long. 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#:

Lihat juga