2016-06-03 28 views
5

Lettura della Biblioteca pthread nella struttura è definito il seguente:Come assegnare un valore da 1 bit?

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

capisco che occupano solo 1 po 'poi come dare valore ad essa come ogni valore assegnato con attivare le bandiere di overflow errore di compilazione dà errore:

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

Rendere non firmato. Un intero di complemento a due bit con firma a 1 bit può contenere solo due valori: -1 e 0. Quindi 1 è una condizione di overflow. –

+0

@ TomKarzes Grazie tom – Vineet1982

+0

@unwind La domanda che hai collegato non è un duplicato. – fuz

risposta

5

È una cattiva idea avere uno int 1 bit, poiché è un tipo firmato. Non è possibile rappresentare 1 utilizzando 1 bit quando si utilizza firmato, è possibile rappresentare solo 0 e -1, che è un po 'strano.

La soluzione è quella di renderlo unsigned int implicit : 1.

Problemi correlati