ho alimentato il seguente codice tramite uno strumento di analisi statica:Le parentesi in C possono modificare il tipo di risultato degli operandi di un'operazione bit a bit?
u1 = (u1^u2); // OK
u1 = (u1^u2) & u3; // NOT OK
u1 = (u1^u2) & 10; // NOT OK
u1 = (u1^u2) & 10U; // NOT OK
u1 = (unsigned char)(u1^u2) & 10U; // OK
u1 = (unsigned char)(u1^u2) & u3; // OK
"OK" si intende lo strumento di analisi statica non si lamentava. "NOT OK" significa che lo strumento di analisi statica ha reclamato - affermando che alcuni operandi di un'operazione bit a bit non sono un numero intero senza segno.
I risultati degli ultimi 2 righe mostrano che le parentesi causano o
a. una conversione di tipo reale a firmata
b. qualcosa che lo strumento di analisi statica pensa sia una conversione di tipo a firmata
Chiederò allo sviluppatore di strumenti di analisi statica riguardo (b).
Ma prima di farlo, mi piacerebbe sapere se forse il linguaggio C è noto per fare (a)?
Grazie a @ pmg! Lascerò la parola "parentesi" nel titolo della domanda perché, anche se ora so che sono irrilevanti, altri potrebbero pensare che siano ciò che sta causando il problema, cercare e trovare questa risposta. Ora capisco che questa buona risposta è un caso speciale di "imparare le regole di promozione dell'intero C". Un sacco di riferimenti là fuori (ora che so cosa cercare). Per esempio. http://tinyurl.com/62fm8yl su stackoverflow e href = "http://www.lysator.liu.se/c/rat/c2.html#3-2" - una discussione su "preservazione e valore non firmati preservare". – talkaboutquality