2010-06-23 28 views
11

¿Cuál es la diferencia entre unsigned long y UINT64? Creo que son iguales, pero no estoy seguro. La definición de UINT64 es:La diferencia entre unsigned long y UINT64

typedef unsigned __int64 UINT64 

(mediante el uso de StdAfx.h)

+1

¿Hay un error tipográfico en su pregunta? Primero declaras "unsigned long to UINT64, creo que es lo mismo", entonces dices: "la defensa de UINT64 es: typedef unsigned __int64 UINT64" que no tiene mucho que ver. El tamaño del bit int, long, long long etc. está definido por la implementación, por lo que no existe una respuesta correcta en cuanto a la plataforma, incluso en Windows (ya que menciona StdAfx.h ...) depende de win32 vs amd64 ... sé más específico. – njsf

+2

Tenga en cuenta que los últimos estándares de borrador ISO tienen tipos intN_t para tipos de anchos específicos en lugar de mínimos. – paxdiablo

+0

@paxdiablo intN_t sí, pero la pregunta era sobre UINT64 que es diferente y no estándar, por lo tanto, me preguntaba si había un _typo_ en la pregunta – njsf

Respuesta

9

UINT64 es específico y declara su intención. Desea un tipo que sea un entero sin signo que tenga exactamente 64 bits de ancho. Que esto sea igual a una longitud sin signo en algunas plataformas es una coincidencia.

+9

Específico mientras está definido, y no portátil .... – njsf

1

Un largo es típicamente de 32 bits (pero esto puede ser muy por arquitectura) y un uint64 siempre es de 64 bits. Un tipo de datos nativos que a veces tiene 64 bits de longitud es long long int.

3

El estándar C++ no define los tamaños de cada uno de los tipos (además de char), por lo que el tamaño de unsigned long está definido por la implementación. En la mayoría de los casos que conozco, unsigned long es un tipo de 32 bits sin signo, mientras que UINT64 (que es un tipo de implementación, ni siquiera se menciona en el estándar) es un entero sin signo de 64 bits en VS.

+0

El el estándar no define el tamaño de 'char' tampoco, su implementación se define usando CHAR_BITS en limits.h. – paxdiablo

+0

Tiene razón en §5.3.3/1 El resultado de 'sizeof' se define como el tamaño en bytes del argumento, y al mismo tiempo define' sizeof (char) 'ser' 1', lo que significa que el tamaño de 'char' es un byte. Pero el tamaño de un byte no está definido en el estándar. En §1.7/1 solo dice que debe ser una secuencia contigua de bits, cuyo número no está definido. –

+0

El estándar define los tamaños * mínimos * de los tipos (aunque lo define en términos de rangos mínimos). Para 'char',' short', 'int',' long' y 'long long' esos mínimos son 8, 16, 16, 32 y 64 bits, respectivamente. (Por cierto, es 'CHAR_BIT' - no S). – caf

Cuestiones relacionadas