"İnt" ve "uint" / "long" ve "ulong" arasındaki fark nedir?


Yanıtlar:


224

"U" ön ekli ilkel veri türleri, aynı bit boyutlarına sahip işaretsiz sürümlerdir. Etkili bir şekilde, bu, negatif sayıları saklayamayacakları anlamına gelir, ancak diğer yandan, imzalı meslektaşlarının iki katı büyüklüğünde pozitif sayılar depolayabilirler. İmzalı muadiller "u" ön ekine sahip değildir.

İnt (32 bit) için sınırlar:

int: 2147483648 to 2147483647 
uint: 0 to 4294967295 

Ve uzun için (64 bit):

long: -9223372036854775808 to 9223372036854775807
ulong: 0 to 18446744073709551615

12
Bu elle çalışmak oldukça eğlenceli. 32 bitlik işaretli değişken, işaret için 1 bit kullanır (pozitif veya negatif), bu nedenle -2 ^ 31 ve + 2 ^ 31 - 1 arasındaki değerleri saklayabilir
Jaco Pretorius

int ve uint'i kullanım için karşılaştırırken hangisi uygulanabilir?
Arun Prasad

C ++ eşdeğeri nedir?
darkgaze

1
@JacoPretorius Bu yanlış. 8 bit int'in aralığı –128 ile 127 arasındadır. 9. bit 256'yı temsil eder. Yani 8 bit ile 255'e kadar (9. değer - 1) tüm değerleri temsil edebilirsiniz. -128 ile 127 aralığının uzunluğu tam olarak 255'tir. Yani işareti tutan bir bit yoktur. 127'ye kadar olan tüm değerler pozitiftir. Yukarıdaki değerler negatif olarak görüntülenir. 255 -1 olur. 254 -2 olacak ve 128'e bir yol
düşüyor

Özellikle int vs uint için işaretsiz tamsayının CLS uyumlu olmadığını ve mümkün olduğunca sık int kullanmanızın tavsiye edildiğini düşünüyorum.
db2

38

uintve ulongimzasız sürümleridir intve long. Bu, negatif olamayacakları anlamına gelir. Bunun yerine daha büyük bir maksimum değere sahiptirler.

Min Max CLS uyumlu yazın
int -2,147,483,648 2,147,483,647 Evet
uint 0 4,294,967,295 Hayır
uzun -9,223,372,036,854,775,808 9,223,372,036,854,775,807 Evet
ulong 0 18,446,744,073,709,551,615 Hayır

Kaynak kodunuzda işaretsiz bir tamsayı yazmak için soneki uveya Uörneğin kullanabilirsiniz 123U.

CLS Uyumlu olmak istiyorsanız, genel arayüzünüzde uint ve ulong kullanmamalısınız .

Daha fazla bilgi için belgeleri okuyun:

Bu arada, orada da kısa ve ushort ve bayt ve sbyte .


Bu ilginç - CLS uyumlu hakkında ne demek istiyorsun? Bağlantı, int için MSDN belgelerine gider. "CLS" ile C # dil spesifikasyonunu kastediyorsanız anlamıyorum - spesifikasyon hem uint hem de ulong'u açıkça tanımlıyor (bölüm 1.3)
Isak Savo

1
@Isak Savo: C # dışında diğer .NET dilleri tarafından kullanılabilecek bir arayüz yazıyorsanız, CLS uyumlu olmak önemlidir.
Mark Byers

Short and ushort'tan bahsettiğiniz, ancak byte ve sbyte'ı atladığınız için merak ediyorum :)
Roman Starkov

10

uanlamı unsigned, ulongişaretsiz büyük bir sayıdır. Sen daha büyük bir değer saklayabilir ulongdaha long, ama hiçbir negatif sayılar izin verdi.

Bir longdeğer, pozitif / negatif bir sayı olup olmadığını göstermek için ilk basamağıyla 64 bit olarak saklanır. aynı ulongzamanda 64 bittir, tüm 64 bit sayıyı saklamak için. dolayısıyla maksimum ulong 2 (64) -1 iken uzun 2 (63) -1'dir.


9

Aradaki fark, uintve ulongişaretsiz veri türleri olmasıdır, bu da aralığın farklı olduğu anlamına gelir: Negatif değerleri kabul etmezler:

int range: -2,147,483,648 to 2,147,483,647
uint range: 0 to 4,294,967,295

long range: 9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
ulong range: 0 to 18,446,744,073,709,551,615

0

C ++ 'dan bu yana epey zaman geçti ama bu cevaplar biraz yanlış.

Boyuta göre, 'int' hiçbir şey değil. Standart bir tam sayının kavramsal bir değeridir; Yineleme gibi şeyler için hızlı olduğu varsayılır. Önceden ayarlanmış bir boyutu yoktur.

Dolayısıyla, cevaplar int ve uint arasındaki farklar açısından doğrudur, ancak "ne kadar büyük oldukları" ya da aralıklarının ne olduğu hakkında konuştuklarında yanlıştır. Bu boyut tanımsızdır veya daha doğrusu, derleyici ve platform ile değişecektir.

Parçalarınızın boyutunu herkesin önünde tartışmak asla kibar değildir.

Bir programı derlemek, int yapar sen soyut C / C ++ alınan ve beton makina koduna çevirdiniz gibi bir büyüklüğe sahip.

Yani, BUGÜN, pratik olarak en yaygın derleyicilerle konuşursak, doğrular. Ama bunu varsaymayın.

Spesifik olarak: 32 bit bir program yazıyorsanız, int tek şey olacaktır, 64 bit, farklı olabilir ve 16 bit farklıdır. Üçünden de geçtim ve 6502 titremeye kısaca baktım

Kısa bir Google araması şunu gösterir: https://www.tutorialspoint.com/cprogramming/c_data_types.htm Bu da iyi bir bilgidir : https://docs.oracle.com/cd/E19620-01/805-3024/lp64- 1 / index.html

bitlerinizin ne kadar büyük olduğu gerçekten umursamıyorsanız int kullanın; değişebilir.

Bir şeyin ne kadar büyük olduğunu bilmek istiyorsanız size_t ve ssize_t kullanın.

İkili veri okuyor veya yazıyorsanız, int kullanmayın. (Genellikle platforma / kaynağa bağlı) belirli bir anahtar kelime kullanın. WinSDK, bununla ilgili pek çok iyi ve sürdürülebilir örneğe sahiptir. Diğer platformlar da öyle.

Tüm bunların sadece akademik / bilgiçlikçi olduğu fikrine, "SMH" olan insanlardan kod yazmak için ÇOK zaman harcadım. Bunlar, sürdürülemez kod yazan insanları yediler. Elbette, 'int' türünü kullanmak ve fazladan yazı yazmak zorunda kalmadan kullanmak kolaydır. Gerçekte ne anlama geldiklerini anlamak için çok çalışma ve biraz da zihin uyuşturucudur.

İnt'i karıştırdığınızda berbat bir kodlama olur.

hızlı bir tam sayı istediğinizde ve aralığı önemsemediğinizde (işaretli / işaretsiz dışında) int ve uint kullanın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.