Jenis numerik integral (referensi C#)

Jenis numerik integral mewakili angka integer. Semua jenis numerik integral adalah jenis nilai. Termasuk jenis sederhana dan dapat diinisialisasi dengan harfiah. 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# Rentang Ukuran Jenis .NET
sbyte -128 hingga 127 Integer 8-bit yang ditandai System.SByte
byte 0 hingga 255 Integer 8-bit yang tidak ditandai System.Byte
short -32,768 hingga 32,767 Integer 16-bit yang ditandai System.Int16
ushort 0 hingga 65,535 Integer 16-bit yang tidak ditandai System.UInt16
int -2,147,483,648 hingga 2,147,483,647 Integer 32-bit yang ditandai System.Int32
uint 0 hingga 4,294,967,295 Integer 32-bit yang tidak ditandai System.UInt32
long -9,223,372,036,854,775,808 hingga 9,223,372,036,854,775,807 Integer 64-bit yang ditandai System.Int64
ulong 0 hingga 18,446,744,073,709,551,615 Integer 64-bit yang tidak ditandai System.UInt64
nint Bergantung pada platform (dihitung saat runtime) Integer 32-bit atau 64-bit yang ditandai System.IntPtr
nuint Bergantung pada platform (dihitung saat runtime) Integer 32-bit atau 64-bit yang tidak ditandai System.UIntPtr

Di semua baris tabel kecuali dua baris terakhir, setiap kata kunci jenis C# dari kolom paling kiri adalah alias untuk jenis .NET yang sesuai. Nama jenis kata kunci dan .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 integer berukuran asli. Anda dapat menggunakan nint kata kunci kontekstual dan nuint untuk menentukan bilangan bulat berukuran asli. Ini adalah bilangan bulat 32-bit saat berjalan dalam proses 32-bit, atau bilangan bulat 64-bit saat berjalan dalam proses 64-bit. Bilangan bulat dapat digunakan untuk skenario interop, pustaka tingkat-rendah, dan untuk mengoptimalkan performa dalam skenario saat matematika bilangan bulat digunakan secara ekstensif.

Jenis bilangan bulat berukuran-asli diwakili secara internal sebagai jenis .NET System.IntPtr dan System.UIntPtr. Mulai dari C# 11, jenis nint dan nuint adalah alias untuk jenis yang mendasari.

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 waktu kompilasi kecuali untuk kasus jenis berukuran asli (nint dan nuint). Properti MinValue dan MaxValue dihitung pada runtime untuk jenis berukuran asli. Ukuran jenis tersebut bergantung pada pengaturan proses.

Gunakan struktur System.Numerics.BigInteger untuk mewakili bilangan bulat bertanda tanpa batas atas atau bawah.

Literal integer

Literal integer dapat berupa

  • desimal: tanpa prefiks apa pun
  • heksadesimal: dengan prefiks 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 harfiah numerik.

Jenis bilangan bulat literal ditentukan oleh sufiksnya sebagai berikut:

  • Jika literal tidak memiliki sufiks, jenisnya adalah yang pertama dari jenis berikut di mana nilainya dapat diwakili: int, uint, long, ulong.

    Catatan

    Literal diinterpretasikan 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 membutuhkan nilai dari jenis tertentu, transmisikan literal ke jenis itu. Gunakan operator unchecked, jika nilai literal tidak dapat diwakili dalam jenis target. Misalnya, unchecked((int)0xFF_FF_FF_FF) menghasilkan -1.

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

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

    Catatan

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

  • Jika literal diakhiri oleh UL, Ul, uL, ul, LU, Lu, lU, atau lu, jenisnya adalah ulong.

Jika nilai yang diwakili oleh literal integer melebihi UInt64.MaxValue, kesalahan kompiler CS1021 terjadi.

Jika jenis literal integer yang ditentukan adalah int dan nilai yang diwakili oleh literal berada dalam rentang jenis tujuan, nilai dapat secara implisit dikonversi ke sbyte, byte, short, ushort, uint, ulong, nint atau 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 pengompilasi CS0031 akan muncul.

Anda juga dapat menggunakan cast untuk mengonversi nilai yang diwakili oleh literal integer ke jenis selain jenis literal yang ditentukan:

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, konversi bersifat implisit. Jika tidak, Anda harus menggunakan ekspresi cast untuk bisa melakukan konversi eksplisit. Untuk informasi selengkapnya, lihat Konversi numerik bawaan.

Integer berukuran asli

Jenis bilangan bulat berukuran native memiliki perilaku khusus karena penyimpanannya ditentukan oleh ukuran bilangan bulat alami pada komputer target.

  • Untuk mendapatkan ukuran bilangan bulat berukuran-asli pada durasi, Anda dapat menggunakan sizeof(). Namun, kode harus dikompilasi di 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 yang setara dari properti statis IntPtr.Size dan UIntPtr.Size.

  • Untuk mendapatkan nilai minimum dan maksimum bilangan bulat berukuran asli pada run time, gunakan MinValue dan MaxValue sebagai properti statis dengan kata kunci nint dan nuint, seperti di 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
    
  • Anda bisa menggunakan nilai konstanta di dalam rentang berikut:

  • Kompilator menyediakan konversi implisit dan eksplisit ke jenis numerik lainnya. Untuk informasi selengkapnya, lihat Konversi numerik bawaan.

  • Tidak ada sintaksis langsung untuk harfiah bilangan bulat berukuran-asli. Tidak ada akhiran untuk menunjukkan bahwa harfiah adalah bilangan bulat berukuran-asli, seperti L untuk menunjukkan long. Anda dapat menggunakan transmisi 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