Quelle est la différence entre unsigned long et unsigned long long?
J'ai attendu que la taille sera différente. Mais les deux sont montrant 8bytes.
#include <iostream>
using namespace std;
int main()
{
cout<<"Size of long:"<<sizeof(unsigned long)<<"\n";
cout<<"Size of Long Long:"<< sizeof(unsigned long long)<<"\n";
}
Output:
Size of long:8
Size of Long Long:8
Essayer sur Windows et vous verrez...
Réponse courte: la mise en Œuvre défini.
Je pense que la Norme C++ n'est pas a
Réponse courte: la mise en Œuvre défini.
Je pense que la Norme C++ n'est pas a
unsigned long long
type? Peut-être, C++11 a introduit cette?OriginalL'auteur cppcoder | 2012-03-08
Vous devez vous connecter pour publier un commentaire.
Ils sont de deux types distincts, même s'ils ont la même taille et de représentation dans certaines particulier de mise en œuvre.
unsigned long
est nécessaire d'être au moins 32 bits.unsigned long long
est nécessaire d'être au moins 64 bits. (En fait, les exigences sont formulées en termes de gammes de valeurs qu'ils peuvent représenter.)Comme vous l'avez vu, ce qui est cohérent avec les deux étant de la même taille, tant que la taille est d'au moins 64 bits.
Dans la plupart des cas, le fait qu'ils sont de deux types distincts n'a pas beaucoup d'importance (sauf que vous ne pouvez pas compter sur eux les deux ayant la même plage de valeurs). Par exemple, vous pouvez affecter un
unsigned long long
à ununsigned long
objet, et la valeur sera convertie implicitement, peut-être avec une certaine perte d'information. De même, vous pouvez passer ununsigned long long
argument à une fonction qui attend uneunsigned long
(sauf si la fonction est variadic, commeprintf
; puis une conversion explicite est nécessaire).Mais un cas où il n'est question, c'est quand vous avez pointeurs. Les types
unsigned long*
etunsigned long long*
ne sont pas seulement distinctes, ils ne sont pas compatible avec l'assignation, car il n'y a pas de conversion implicite de l'un à l'autre. Par exemple, ce programme:produit est le suivant quand je compile avec g++:
Une différence: la norme C++ que je n'ai pas le
long long
etunsigned long long
types jusqu'en 2011. C ajoutée avec l'1999 la norme, et il n'est pas rare pour les pré-C++2011 (et pré-C99) compilateurs comme une extension.OriginalL'auteur Keith Thompson
Elle est mise en œuvre définie comme iammilind pointu
voir Combien d'octets est unsigned long long? pour plus de détails
OriginalL'auteur Vijay Agrawal
La norme dit que
long long
doit être au moins de la même taille quelong
, ou plus. Respectivement pourunsigned
types,long
etint
.Les valeurs réelles de mise en œuvre et dépendant du matériel.
OriginalL'auteur J.N.