|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Lainate (MI)
Messaggi: 831
|
[C] perché questo warning?
Ciao a tutti,
devo scrivere un programma che tratta i singoli bit di un intero. Giusto per fare una prova ho scritto un programma che dichiara un intero unsigned a cui poi viene assegnato il valore (2^32) - 1 = 4294967295. Compilando mi viene segnalato il seguente warning: "warning: this decimal constant is unsigned only in ISO C90" Non mi crea particolari problemi, ma mi chiedo come mai mi venga segnalato. Se dichiaro una variabile unsigned, non dovrei avere disponibili i valori da 0 a (2^32) -1? Jax
__________________
Alea iacta est. Che io deceda se recedo |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 263
|
Non ne sono sicuro, ma potrebbe darsi che, dato che tu usi l'ultimo bit(quello piú sigificativo) in uno standard non ISO C90 viene interpretato come bit che determina se la variabile é positiva o negativa. Questo ti potrebbe dare problemi forse con un altro compilatore! Ripeto peró che é solo un ipotesi.
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Nov 2001
Città: Lainate (MI)
Messaggi: 831
|
Quote:
Però non capisco a che serve allora dichiarare la variabile unsigned.
__________________
Alea iacta est. Che io deceda se recedo |
|
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 263
|
prova a mettere il suffisso UL(unsigned long)
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
Per questo motivo ti segnala il warning. Come hai effettuato l'assegnazione? Se per esempio hai scritto unsigned int a = 4294967295; otterrai il warning poiche' la variabile a e' unsigned, ma il numero senza alcuna specifica ulteriore viene considerato con il relativo segno. Prova a scrivere unsigned int a = (unsigned int)0xFFFFFFFF; (uso l'esadecimale perche' mi sembra piu' comprensibile, soprattutto per il fatto che si voglia andare a lavorare sui bit).
__________________
In God we trust; all others bring data |
|
|
|
|
|
|
#6 | ||
|
Senior Member
Iscritto dal: Nov 2001
Città: Lainate (MI)
Messaggi: 831
|
Quote:
Quote:
Ho fatto delle prove ed è salato fuori che non digerisce la forma decimale; infatti anche con unsigned int numero = (unsigned int) 4294967295; salta fuori il warning, mentre co la rappresentazione esdecimale va tutto liscio. Grazie per la delucidazione. Jax
__________________
Alea iacta est. Che io deceda se recedo |
||
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2001
Città: Lainate (MI)
Messaggi: 831
|
giusto per completare il concetto (magari a qualcuno interessa, se è curioso come me
Quindi: Codice:
unsigned int numero = 4294967295; Codice:
unsigned int numero = 4294967295u;
__________________
Alea iacta est. Che io deceda se recedo |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:25.




















