Qual è la differenza tra "int" e "uint" / "long" e "ulong"?


Risposte:


224

I tipi di dati primitivi con prefisso "u" sono versioni senza segno con le stesse dimensioni di bit. In effetti, questo significa che non possono memorizzare numeri negativi, ma d'altra parte possono memorizzare numeri positivi due volte più grandi delle loro controparti firmate. Le controparti firmate non hanno il prefisso "u".

I limiti per int (32 bit) sono:

int: 2147483648 to 2147483647 
uint: 0 to 4294967295 

E per lungo (64 bit):

long: -9223372036854775808 to 9223372036854775807
ulong: 0 to 18446744073709551615

12
Questo è abbastanza divertente da lavorare a mano. Una variabile con segno a 32 bit utilizza 1 bit per il segno (positivo o negativo), quindi può memorizzare valori compresi tra -2 ^ 31 e + 2 ^
31-1

quando si confrontano int e uint per l'utilizzo, quale è fattibile?
Arun Prasad

Qual è l'equivalente in c ++?
darkgaze

@JacoPretorius Quello è sbagliato. 8 bit int ha un intervallo da –128 a 127. Il 9 ° bit rappresenta 256. Quindi con 8 bit è possibile rappresentare tutti i valori fino a 255 (9 ° val - 1). L'intervallo da -128 a 127 ha una lunghezza esattamente di 255. Quindi non c'è bit che contiene il segno. Tutti i valori fino a 127 sono positivi. I valori sopra vengono visualizzati negativi. 255 sarebbe -1. 254 sarebbe -2 e quindi solo andata fino a 128.
C4d

Penso che valga anche la pena notare che specificamente per int vs uint, l'intero senza segno non è conforme a CLS e si consiglia di utilizzare int il più spesso possibile.
db2

38

uinte ulongsono le versioni non firmate di inte long. Ciò significa che non possono essere negativi. Invece hanno un valore massimo maggiore.

Tipo Min Max conforme a CLS
int -2.147.483.648 2.147.483.647 Sì
uint 0 4.294.967.295 n
lungo –9.223.372.036.854.775.808 9.223.372.036.854.775.807 Sì
ulong 0 18.446.744.073.709.551.615 n

Per scrivere un int letterale senza segno nel codice sorgente puoi usare il suffisso uo, Uad esempio 123U.

Non dovresti usare uint e ulong nella tua interfaccia pubblica se desideri essere conforme a CLS .

Leggi la documentazione per maggiori informazioni:

A proposito, ci sono anche short e ushort e byte e sbyte .


Questo è interessante: cosa intendi per conforme a CLS? Il collegamento va alla documentazione MSDN per int. Se per "CLS" intendi la specifica del linguaggio C #, allora non capisco - la specifica descrive chiaramente sia uint che ulong (sezione 1.3)
Isak Savo

1
@Isak Savo: è importante essere conformi a CLS se si sta scrivendo un'interfaccia che potrebbe essere utilizzata da linguaggi .NET diversi da C #.
Mark Byers

Curioso che tu abbia menzionato short e ushort ma tralascia byte e sbyte :)
Roman Starkov

10

usignifica unsigned, quindi ulongè un numero elevato senza segno. È possibile memorizzare un valore più grande in ulongquanto long, ma non i numeri negativi permesso.

Un longvalore viene memorizzato a 64 bit, con la sua prima cifra per mostrare se è un numero positivo / negativo. mentre ulongè anche a 64 bit, con tutti i 64 bit per memorizzare il numero. quindi il massimo di ulong è 2 (64) -1, mentre long è 2 (63) -1.


9

La differenza è che uinte ulongsono tipi di dati senza segno, il che significa che l'intervallo è diverso: non accettano valori negativi:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.