159 votes

Quelle est la différence entre "int" et "uint" / "long" et "ulong" ?

Je suis au courant int et long (nombres 32 bits et 64 bits), mais que sont les uint et ulong ?

309voto

Isak Savo Points 15357

Les types de données primitifs préfixés par "u" sont des versions non signées avec les mêmes tailles de bits. En fait, cela signifie qu'ils ne peuvent pas stocker des nombres négatifs, mais qu'ils peuvent en revanche stocker des nombres positifs deux fois plus grands que leurs homologues signés. Les contreparties signées n'ont pas de préfixe "u".

Les limites pour int (32 bits) sont :

int: –2147483648 to 2147483647 
uint: 0 to 4294967295 

Et pour longtemps (64 bits) :

long: -9223372036854775808 to 9223372036854775807
ulong: 0 to 18446744073709551615

20 votes

C'est assez amusant de travailler à la main. Une variable signée de 32 bits utilise 1 bit pour le signe (positif ou négatif) et peut donc stocker des valeurs comprises entre -2^31 et +2^31 - 1.

0 votes

Lorsque l'on compare int et uint pour l'utilisation, lequel est réalisable ?

0 votes

Quel est l'équivalent en c++ ?

47voto

Mark Byers Points 318575

uint et ulong sont les versions non signées de int et long . Cela signifie qu'ils ne peuvent pas être négatifs. Au contraire, ils ont une valeur maximale plus grande.

Type    Min                           Max                           CLS-compliant
int     -2,147,483,648                2,147,483,647                 Yes
uint    0                             4,294,967,295                 No
long    –9,223,372,036,854,775,808    9,223,372,036,854,775,807     Yes
ulong   0                             18,446,744,073,709,551,615    No

Pour écrire un unsigned int littéral dans votre code source, vous pouvez utiliser le suffixe u ou U par exemple 123U .

Vous ne devez pas utiliser uint et ulong dans votre interface publique si vous souhaitez être Conforme aux normes CLS .

Lisez la documentation pour plus d'informations :

Au fait, il y a aussi court et ushort et octet et sbyte .

0 votes

C'est intéressant - que voulez-vous dire par conforme au CLS ? Le lien renvoie à la documentation MSDN pour int. Si par "CLS" vous entendez la spécification du langage C#, alors je ne comprends pas - la spécification décrit clairement uint et ulong (section 1.3).

1 votes

@Isak Savo : Il est important d'être conforme à CLS si vous écrivez une interface qui pourrait être utilisée par d'autres langages .NET que C#.

0 votes

Il est curieux que vous mentionniez short et ushort mais que vous oubliiez byte et sbyte :)

13voto

Danny Chen Points 14781

u signifie unsigned donc ulong est un grand nombre sans signe. Vous pouvez stocker une valeur plus grande dans ulong que long mais les nombres négatifs ne sont pas autorisés.

A long est stockée en 64 bits, avec son premier chiffre pour indiquer s'il s'agit d'un nombre positif ou négatif. ulong est également 64 bits, avec tous les 64 bits pour stocker le nombre. Ainsi, le maximum de ulong est 2(64)-1, tandis que long est 2(63)-1.

12voto

srodriguez Points 700

La différence est que le uint et ulong sont des types de données non signés, ce qui signifie que la plage est différente : ils n'acceptent pas les valeurs négatives :

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

0voto

J. Gwinner Points 99

Cela fait un moment que je n'ai pas fait de C++ mais ces réponses sont un peu fausses.

En ce qui concerne la taille, "int" n'est rien. Il s'agit d'une valeur théorique d'un entier standard, supposé être rapide pour des raisons telles que l'itération. Il n'a pas de taille prédéfinie.

Ainsi, les réponses sont correctes en ce qui concerne les différences entre int et uint, mais sont incorrectes lorsqu'elles parlent de "leur taille" ou de leur étendue. Cette taille est indéfinie, ou plus exactement, elle changera avec le compilateur et la plate-forme.

Il n'est jamais poli de discuter de la taille de ses seins en public.

Lorsque vous compilez un programme, int fait ont une taille, car vous avez pris l'abstrait C/C++ et l'avez transformé en code machine concret.

Donc, AUJOURD'HUI, en pratique, avec les compilateurs les plus courants, ils sont corrects. Mais ne supposez pas cela.

Plus précisément : si vous écrivez un programme 32 bits, int sera une chose, 64 bits, cela peut être différent, et 16 bits est différent. J'ai parcouru les trois et j'ai brièvement regardé les 6502 frisson

Une brève recherche sur Google montre ceci : https://www.tutorialspoint.com/cprogramming/c_data_types.htm C'est aussi une bonne information : https://docs.oracle.com/cd/E19620-01/805-3024/lp64-1/index.html

Utilisez int si vous ne vous souciez vraiment pas de la taille de vos bits ; elle peut changer.

Utilisez size_t et ssize_t si vous voulez connaître la taille d'un objet.

Si vous lisez ou écrivez des données binaires, n'utilisez pas int. Utilisez un mot-clé spécifique (généralement dépendant de la plate-forme ou de la source). WinSDK a beaucoup de bons exemples faciles à maintenir. D'autres plateformes en ont aussi.

J'ai passé BEAUCOUP de temps à parcourir le code de personnes qui "SMH" à l'idée que tout cela n'est que théorique/pédagogique. Ce sont ces personnes qui écrivent du code non maintenable. Bien sûr, il est facile d'utiliser le type 'int' et de l'utiliser sans toute cette fichue saisie supplémentaire. C'est beaucoup de travail pour comprendre ce qu'ils voulaient vraiment dire, et un peu abrutissant.

C'est du codage de merde quand vous mélangez l'int.

Utilisez int et uint lorsque vous voulez simplement un entier rapide et que vous ne vous souciez pas de la plage (autre que signée/non signée).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X