Ho cercato questo sito per una risposta e ho trovato molte risposte al confronto firmato/non firmato, ma questo problema è che solo i parametri non firmati vengono confrontati, ma funziona comunque in modo divertente.non firmato diventa firmato nel confronto delle istruzioni if?
Il problema con il seguente codice è che il primo if
-statment non si verifica ("ciao") dove è il secondo ("mondo"). Questo ho interpretato come il calcolo eseguito all'interno dello-if
-statment genera un numero negativo ma lo stesso esatto calcolo fatto con il risultato salvato in una variabile non lo fa (anche se il risultato è stato salvato in una variabile firmata).
Il compilatore utilizzato è gcc 4.4.
unsigned short u16_varHigh;
unsigned short u16_varLow;
unsigned short u16_Res1;
signed short s16_Res1;
u16_varHigh = 0xFFFF;
u16_varLow = 10;
u16_Res1 = u16_varLow - u16_varHigh; // response is 11 as expected
s16_Res1 = u16_varLow - u16_varHigh; // response is 11 as expected
// Does not enter
if((u16_varLow - u16_varHigh) > (unsigned short)5)
{
printf("hello");
}
// Does enter
if((unsigned short)(u16_varLow - u16_varHigh) > 5)
{
printf("world");
}
Qualcuno può spiegare questo per me e forse trovare una soluzione per una correzione in modo che il primo if
-affermazione funziona così?
possibile duplicato (http [Domanda sul regole promozione integrale C.]: // StackOverflow .com/questions/2280663/question-about-c-integral-promotion-rules) – unwind
Non sono d'accordo. Su argomenti simili, ma non duplicati. – Kos