Die Berechnung und Verwendung maximale Wert von uint32_t

Ich weiß, dass UINT32_MAX existiert, aber ich habe nicht in der Lage, es zu benutzen. Ich habe versucht printf("%d\n", UINT32_MAX); und es ausgedruckt -1. Mit %ld statt %d stellte mich mit dem Fehler, dass UINT32_MAX ist vom Typ unsigned int und muss %d zu drucken.

Bitte helfen, was ich idealerweise wollen, ist ein makro/enum, hält den maximalen Wert von word_t was ist ein definierter Typ von mir und das ist derzeit uint32_t.

Ich hoffe, dass ich klar gemacht was ich will, wenn nicht, fühlen Sie sich bitte frei zu Fragen.

BEARBEITEN

Ich habe vergessen zu sagen, was ich eigentlich versuche zu tun. All dies wird verwendet, um ein array von Ganzzahlen, die alle auf Ihren maximalen Wert, weil das Integer-array ist eigentlich eine bitmap, setzt alle bits auf 1.

Sie möchten eine vorzeichenlose Ganzzahl, mit der alle bits 1 sind, dann geben Sie einfach -1. Der Typ ist egal (solange es nicht signiert), die Darstellung von Ganzzahlen mit Vorzeichen, die auf die Implementierung egal ist, und Sie brauchen nicht, um herauszufinden, den Namen des Makros für die korrekte max-Wert (das macht es einfacher zu handhaben, mit typedefs, die möglicherweise in Zukunft ändern).
Jessop: Ist das nur zufällige Verhalten oder können Sie sich wirklich auf ihn verlassen?
es garantiert durch den C-standard. Signed-unsigned-Wandlung ist 6.3.1.3/2, und die Darstellung von vorzeichenlosen int-Typen ist 6.2.6.2/1 (obwohl man eigentlich nicht die Sorge um die speicherdarstellung, die Sie nur Sorge, dass -1 umgewandelt in unsigned durch "hinzufügen einer mehr als der maximale Wert, der dargestellt werden kann, in den neuen Typ", und damit -1 konvertiert jeden Datentyp ohne Vorzeichen ist UTYPE_MAX).
Ich weiß, es mag sinnlos sein, zu reden, eine "richtige" Art und Weise... aber nicht ~0, besser zu sein als -1 ist... ich meine, ~0 ist, was Sie eigentlich möchten, -1 gibt nur ~0, als ein side-effect of addition/Subtraktion.

InformationsquelleAutor orlp | 2011-03-04

Schreibe einen Kommentar