2010-06-23 11 views
11

Was ist der Unterschied zwischen unsigned long und UINT64? Ich denke, sie sind gleich, aber ich bin mir nicht sicher. Die Definition von UINT64 ist:Der Unterschied zwischen unsigned long und UINT64

typedef unsigned __int64 UINT64 

(von StdAfx.h verwenden)

+1

Gibt es einen Tippfehler auf Ihre Frage? Du sagst zuerst "unsigned long to UINT64 ich denke, es ist das gleiche" dann sagst du: "Die Verteidigung von UINT64 ist: typedef unsigned __int64 UINT64", die lange nicht mehr zu sehen ist. Bit-Größe von int, lang, lang lang usw. ist die Implementierung definiert, also gibt es keine richtige Antwort, wie für die Plattform, sogar unter Windows (da Sie StdAfx.h erwähnen ...) hängt es von Win32 vs Amd64 ... sei genauer. – njsf

+2

Beachten Sie, dass die neuesten ISO-Entwurfsstandards intN_t-Typen für spezifische Typen anstelle von Mindestbreiten verwenden. – paxdiablo

+0

@paxdiablo intN_t ja, aber die Frage war über UINT64, die anders ist und nicht-Standard, also ich frage, ob es eine _typo_ auf die Frage – njsf

Antwort

9

UINT64 spezifisch ist, und erklärt Ihre Absicht. Sie möchten einen Typ, der eine vorzeichenlose Ganzzahl ist, die genau 64 Bit breit ist. Dass dies auf manchen Plattformen einem vorzeichenlosen Long entspricht, ist Zufall.

+9

Spezifische, solange es definiert ist, und nicht-portable .... – njsf

1

Ein Long ist typischerweise 32 Bit (aber das kann sehr pro Architektur) und ein Uint64 ist immer 64 Bit. Ein nativer Datentyp, der manchmal 64 Bits lang ist, ist ein long long int.

3

Der C++ - Standard definiert nicht die Größen jedes der Typen (neben char), so dass die Größe unsigned long Implementierung definiert ist. In den meisten Fällen weiß ich, aber unsigned long ist ein vorzeichenloser 32-Bit-Typ, während UINT64 (die eine Implementierung ist, nicht einmal im Standard erwähnt) ist eine 64-Bit-Ganzzahl ohne Vorzeichen in VS.

+0

Die Der Standard definiert auch nicht die Größe von 'char', seine Implementierung wird mit CHAR_BITS in limits.h definiert. – paxdiablo

+0

Sie haben Recht in §5.3.3/1 Das Ergebnis von 'sizeof' ist definiert als die Größe in Bytes des Arguments und definiert gleichzeitig' sizeof (char) 'als' 1', was bedeutet, dass die Größe von 'char' ist ein Byte. Aber die Größe eines Bytes ist im Standard nicht definiert. In § 1.7/1 heißt es nur, dass es sich um eine zusammenhängende Folge von Bits handeln muss, deren Anzahl nicht definiert ist. –

+0

Der Standard definiert die * minimalen * Größen der Typen (obwohl sie in Bezug auf die Mindestbereiche definiert sind). Für "char", "short", "int", "long" und "long long" sind diese Minima jeweils 8, 16, 16, 32 und 64 Bit. (Übrigens ist es 'CHAR_BIT' - kein S). – caf

Verwandte Themen