2010-06-23 19 views
11

Qual è la differenza tra unsigned long e UINT64? Penso che siano uguali, ma non ne sono sicuro. La definizione di UINT64 è:La differenza tra unsigned long e UINT64

typedef unsigned __int64 UINT64 

(utilizzando StdAfx.h)

+1

C'è un errore di battitura nella tua domanda? Per prima cosa dichiari "unsigned long to UINT64 penso che sia lo stesso", allora tu dici: "la defenizione di UINT64 è: typedef unsigned __int64 UINT64" che non ha molto da vedere da nessuna parte. La dimensione del bit di int, long, long long ecc è definita dall'implementazione, quindi in termini di standard non esiste una risposta corretta, come per la piattaforma, anche in Windows (dato che si menziona StdAfx.h ...) dipende da win32 vs amd64 ... Sii più preciso. – njsf

+2

Ricorda che gli ultimi standard di bozza ISO hanno tipi intN_t per tipi di larghezza specifica anziché minima. – paxdiablo

+0

@paxdiablo intN_t sì, ma la domanda riguardava UINT64 che è diversa e non standard, quindi mi chiedevo se ci fosse un _typo_ nella domanda – njsf

risposta

9

UINT64 è specifico e dichiara il vostro intento. Si desidera un tipo che è un numero intero senza segno che ha esattamente 64 bit di larghezza. Che questo può essere uguale a un lungo senza segno su alcune piattaforme è una coincidenza.

+9

Specifico finché è definito, e non portatile .... – njsf

1

Un lungo è in genere 32 bit (ma questo può molto per architettura) e un uint64 è sempre a 64 bit. Un tipo di dati nativo che a volte è lungo 64 bit è un long long int.

3

Lo standard C++ non definisce le dimensioni di ciascuno dei tipi (oltre a char), pertanto la dimensione di unsigned long è definita dall'implementazione. Nella maggior parte dei casi, tuttavia, lo unsigned long è un tipo a 32 bit senza segno, mentre UINT64 (che è un tipo di implementazione, non menzionato nemmeno nello standard) è un numero intero senza segno a 64 bit in VS.

+0

Il lo standard non definisce la dimensione di 'char', l'implementazione è definita usando CHAR_BITS in limits.h. – paxdiablo

+0

Hai ragione in §5.3.3/1 Il risultato di 'sizeof' è definito come la dimensione in byte dell'argomento, e allo stesso tempo definisce' sizeof (char) 'come' 1', il che significa che la dimensione di 'char' è di un byte. Ma la dimensione di un byte non è definita nello standard. In §1.7/1 dice solo che deve essere una sequenza contigua di bit, il cui numero è indefinito. –

+0

Lo standard definisce le dimensioni * minime * dei tipi (sebbene la definisca in termini di intervalli minimi). Per 'char',' short', 'int',' long' e 'long long' quei minimi sono rispettivamente 8, 16, 16, 32 e 64 bit. (A proposito, è 'CHAR_BIT' - no S). – caf

Problemi correlati