Tam sayı türleri (C# başvurusu)

Tamsayı sayısal türleri tamsayı sayılarını temsil gösterir. Tüm tam sayı sayısal türleri değer türleridir. Bunlar ayrıca basit türlerdir ve değişmez değerlerle başlatılabilir. Tüm tam sayı sayısal türleri aritmetik, bit düzeyinde mantıksal, karşılaştırma ve eşitlik işleçlerini destekler.

İntegral türlerinin özellikleri

C# aşağıdaki önceden tanımlanmış tam sayı türlerini destekler:

C# türü/anahtar sözcüğü Aralık Boyut .NET türü
sbyte -128 - 127 İşaretli 8 bit tamsayı System.SByte
byte 0 - 255 İşaretsiz 8 bit tamsayı System.Byte
short -32.768 - 32.767 İşaretli 16 bit tamsayı System.Int16
ushort 0 - 65.535 İşaretsiz 16 bit tamsayı System.UInt16
int -2.147.483.648 - 2.147.483.647 İşaretli 32 bit tamsayı System.Int32
uint 0 - 4.294.967.295 İşaretsiz 32 bit tamsayı System.UInt32
long -9.223.372.036.854.775.808 - 9.223.372.036.854.775.807 İşaretli 64 bit tamsayı System.Int64
ulong 0 - 18.446.744.073.709.551.615 İşaretsiz 64 bit tamsayı System.UInt64
nint Platforma bağlıdır (çalışma zamanında hesaplanır) İmzalı 32 bit veya 64 bit tamsayı System.IntPtr
nuint Platforma bağlıdır (çalışma zamanında hesaplanır) İşaretsiz 32 bit veya 64 bit tamsayı System.UIntPtr

Son ikisi dışındaki tüm tablo satırlarında, en soldaki sütundaki her C# türü anahtar sözcüğü, karşılık gelen .NET türü için bir diğer addır. Anahtar sözcük ve .NET türü adı birbirinin yerine kullanılabilir. Örneğin, aşağıdaki bildirimler aynı türdeki değişkenleri bildirir:

int a = 123;
System.Int32 b = 123;

nint Tablonun son iki satırındaki ve nuint türleri yerel boyutlu tamsayılardır. C# 9.0'dan başlayarak, yerel boyutlu tamsayıları tanımlamak için ve nuint anahtar sözcüklerini kullanabilirsiniznint. Bunlar, 32 bit işlemde çalıştırılırken 32 bit tamsayılar veya 64 bit bir işlemde çalıştırılırken 64 bit tamsayılardır. Bunlar birlikte çalışma senaryoları, alt düzey kitaplıklar için ve tamsayı matematiğin yoğun olarak kullanıldığı senaryolarda performansı iyileştirmek için kullanılabilir.

Yerel boyutlu tamsayı türleri dahili olarak .NET türleri System.IntPtr ve System.UIntPtrolarak temsil edilir. C# 11'den başlayarak ve nuint türleri, nint temel alınan türlerin diğer adlarıdır.

Her integral türünün varsayılan değeri sıfırdır 0.

İntegral türlerinin her biri, bu türün en düşük ve en yüksek değerini sağlayan ve özelliklerine sahiptir MinValueMaxValue . Bu özellikler, yerel boyutlu türlerin (nint ve nuint) durumu dışında derleme zamanı sabitleridir. MinValue ve MaxValue özellikleri yerel boyutlu türler için çalışma zamanında hesaplanır. Bu türlerin boyutları işlem ayarlarına bağlıdır.

System.Numerics.BigInteger Üst veya alt sınırları olmayan işaretli bir tamsayıyı temsil etmek için yapısını kullanın.

Tamsayı değişmez değerleri

Tamsayı değişmez değerleri

  • decimal: herhangi bir ön ek olmadan
  • onaltılık: veya 0X ön ekiyle 0x
  • binary: veya 0B ön eki ile 0b

Aşağıdaki kod, her birinin bir örneğini gösterir:

var decimalLiteral = 42;
var hexLiteral = 0x2A;
var binaryLiteral = 0b_0010_1010;

Yukarıdaki örnekte ayrıca basamak ayırıcısı olarak kullanımı _ gösterilmektedir. Basamak ayırıcısını her türlü sayısal değişmez değerle kullanabilirsiniz.

Tamsayı değişmez değeri türü, aşağıdaki gibi sonekiyle belirlenir:

  • Değişmez değerde sonek yoksa, türü değerinin temsil edilebileceği aşağıdaki türlerden ilkidir: int, uint, , longulong.

    Not

    Değişmez değerler pozitif değerler olarak yorumlanır. Örneğin, değişmez değer 0xFF_FF_FF_FF türün uint sayısını 4294967295 temsil eder, ancak türün sayısıyla -1 aynı bit gösterimine int sahiptir. Belirli bir türde bir değere ihtiyacınız varsa, bu türe bir değişmez değer yazın. unchecked Sabit değer hedef türde gösterilemiyorsa işlecini kullanın. Örneğin, unchecked((int)0xFF_FF_FF_FF) üretir -1.

  • Değişmez değer veya uile U soneklenmişse, türü değerinin temsil edilebileceği aşağıdaki türlerden ilkidir: uint, ulong.

  • Değişmez değer veya lile L soneklenmişse, türü değerinin temsil edilebileceği aşağıdaki türlerden ilkidir: long, ulong.

    Not

    Küçük harfi l sonek olarak kullanabilirsiniz. Ancak, bu bir derleyici uyarısı oluşturur çünkü harfinin l rakamı 1ile karıştırılabilir. Netlik için kullanın L .

  • Değişmez değer , , , Ul, uL, ulLU, Lu, lUveya luile soneklenmişseUL, türü olurulong.

Bir tamsayı değişmez değeriyle temsil edilen değer değerini aşarsa UInt64.MaxValue, bir derleyici hatası CS1021 oluşur.

Bir tamsayı değişmez değerinin belirlenen türü ise int ve değişmez değer tarafından temsil edilen değer hedef türün aralığındaysa, değer örtük olarak , , byte, shortushort, uint, ulongnint veya nuintöğesine dönüştürülebilirsbyte:

byte a = 17;
byte b = 300;   // CS0031: Constant value '300' cannot be converted to a 'byte'

Yukarıdaki örnekte gösterildiği gibi, değişmez değerin değeri hedef türün aralığında değilse, cs0031 derleyici hatası oluşur.

Bir tamsayı değişmez değeriyle temsil edilen değeri, sabit değerin belirlenen türünden başka bir türe dönüştürmek için de atama kullanabilirsiniz:

var signedByte = (sbyte)42;
var longVariable = (long)42;

Dönüşümler

Herhangi bir tam sayı türünü başka bir tam sayı sayısal türüne dönüştürebilirsiniz. Hedef tür, kaynak türün tüm değerlerini depolayabilirse, dönüştürme örtük olur. Aksi takdirde, açık dönüştürme gerçekleştirmek için bir atama ifadesi kullanmanız gerekir. Daha fazla bilgi için bkz . Yerleşik sayısal dönüştürmeler.

Yerel boyutlu tamsayılar

Depolama hedef makinedeki doğal tamsayı boyutu tarafından belirlendiğinden, yerel boyutlu tamsayı türlerinin özel davranışı vardır.

  • Çalışma zamanında yerel boyutlu bir tamsayı boyutunu almak için kullanabilirsiniz sizeof(). Ancak, kodun güvenli olmayan bir bağlamda derlenmiş olması gerekir. Örnek:

    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
    

    Statik ve UIntPtr.Size özelliklerden IntPtr.Size eşdeğer değeri de alabilirsiniz.

  • Çalışma zamanında yerel boyutlu tamsayıların en düşük ve en yüksek değerlerini almak için aşağıdaki örnekte olduğu gibi ve MaxValue anahtar sözcükleriyle statik nint özellikler olarak ve nuint kullanınMinValue:

    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
    
  • Aşağıdaki aralıklarda sabit değerler kullanabilirsiniz:

  • Derleyici, diğer sayısal türlere örtük ve açık dönüştürmeler sağlar. Daha fazla bilgi için bkz . Yerleşik sayısal dönüştürmeler.

  • Yerel boyutlu tamsayı değişmez değerleri için doğrudan söz dizimi yoktur. Değişmez değerin yerel boyutlu bir tamsayı olduğunu belirten bir sonek yoktur; örneğin L , öğesini longgösterir. Bunun yerine diğer tamsayı değerlerinin örtük veya açık atamalarını kullanabilirsiniz. Örnek:

    nint a = 42
    nint a = (nint)42;
    

C# dili belirtimi

Daha fazla bilgi için C# dil belirtiminin aşağıdaki bölümlerine bakın:

Ayrıca bkz.