Anzahl der Bits in char erhalten

7

Wie bekomme ich die Anzahl der Bits im Typ char ?

Ich weiß über CHAR_BIT von climits . Dies wird beschrieben als »Das Makro liefert den maximalen Wert für die Anzahl der Bits, die zur Darstellung eines Objekts vom Typ char verwendet werden.« C-Referenz von Dikumware . Ich verstehe, dass das die Anzahl der Bits in char bedeutet, nicht wahr?

Kann ich irgendwie mit std::numeric_limits dasselbe Ergebnis erzielen? std::numeric_limits<char>::digits gibt 7 korrekt zurück, aber leider, weil dieser Wert die Signedness des 8-Bit-Zeichens hier respektiert ...

    
mkluwe 11.02.2010, 19:38
quelle

4 Antworten

10

Wenn Sie zu spezifisch sein möchten, können Sie dies tun:

%Vor%

Wenn Sie wissen, dass Sie die Größe von Char sicher tun werden, ist es etwas übertrieben, da die Größe von (char) garantiert 1 ist.

Aber wenn Sie zu einem anderen Typ wie wchar_t wechseln, ist das wichtig.

    
R Samuel Klatchko 11.02.2010, 19:56
quelle
12

CHAR_BIT ist per Definition die Anzahl der Bits in der Objektdarstellung vom Typ [signed/unsigned] char .

numeric_limits<>::digits ist die Anzahl der Nicht-Zeichen-Bits im Wert Darstellung des angegebenen Typs.

Welchen brauchst du?

Wenn Sie nach der Anzahl der Bits in der Objektrepräsentation suchen, dann ist der richtige Ansatz, das sizeof vom Typ zu nehmen und es mit CHAR_BIT zu multiplizieren (es gibt natürlich keinen Sinn, mit sizeof zu multiplizieren) im speziellen Fall von char types, da ihre Größe immer 1 ist, und da CHAR_BIT per Definition alredy enthält, was Sie brauchen).

Wenn Sie über Wertdarstellung sprechen, dann ist numeric_limits<> der richtige Weg.

Bei unsigned char type ist die Bitgröße der Objektdarstellung ( CHAR_BIT ) garantiert identisch mit der Bitgröße der Wertdarstellung, Sie können also numeric_limits<unsigned char>::digits und CHAR_BIT synonym verwenden, aber dies könnte aus konzeptioneller Sicht fragwürdig sein.

    
AnT 11.02.2010 20:06
quelle
2

Wenn Sie sich das Snippet-Archiv für diesen Code anschauen hier , hier ist eine angepasste Version, die ich auch mache Diesen Code nicht beanspruchen:

%Vor%

Hoffe, das hilft, Freundliche Grüße, Tom.

    
t0mm13b 11.02.2010 20:29
quelle
1

Ein nicht effizienter Weg:

%Vor%     
Mark Wilkins 11.02.2010 20:06
quelle

Tags und Links