2016-06-03 12 views
5

die pthread-Bibliothek in der Struktur der Lektüre der folgenden definiert:Wie wird ein 1-Bit-Wert zugewiesen?

struct ptw32_thread_t_ 
{ 
     .... 
     int implicit:1; 
     ...... 
}; 

Ich verstehe, dass es nur 1 Bit besetzen dann, wie Wert, um es mit Aktivierung der Überlauffehler Flags als jeder Wert geben zugewiesen compilieren Fehler gibt:

ptw32_thread_t *sp; 
sp = (ptw32_thread_t *) calloc (1, sizeof(ptw32_thread_t)); 
sp->implicit = 1; 

error: overflow in implicit constant conversion [-Werror=overflow] 
+5

Machen Sie es unsigniert. Eine 1-Bit vorzeichenbehaftete Zweierkomplement-Ganzzahl kann nur zwei Werte enthalten: -1 und 0. Also ist 1 eine Überlaufbedingung. –

+0

@TomKarzes Dank tom – Vineet1982

+0

@unwind Die Frage, die Sie verknüpften, ist kein Duplikat. – fuz

Antwort

5

Es ist eine schlechte Idee, ein 1-Bit int zu haben, da es ein signierter Typ ist. Sie können nicht 1 mit 1 Bit bei der Verwendung von signiert darstellen, können Sie nur 0 und -1 darstellen, was ein bisschen seltsam ist.

Die Lösung ist es zu machen.

Verwandte Themen