correlata ad un previous question, non riesco a capire alcune regole MISRA C 2004.uso di piccoli numeri interi con operatore bit in C
In ISO C99 draft 2007, nella sezione 6.5 § 4:
Alcuni operatori (l'operatore unario ~ e gli operatori binari < <, >>, &, ^, e |, descritti collettivamente come operatori bit a bit) sono richiesti per avere operandi con tipo intero. Questi operatori producono valori che dipendono dalle rappresentazioni interne degli interi e presentano aspetti definiti dall'implementazione e non definiti per i tipi firmati.
Ok, l'utilizzo di un numero intero con segno con operatori bit a bit può produrre un comportamento non definito (e non ha senso).
Una buona soluzione consiste nell'utilizzare la conversione esplicita a un tipo intero senza segno più ampio per bypassare la promozione integrale e quindi non utilizzare il valore con segno con operatori bit per bit (vedere le risposte associate alla mia domanda precedente).
Ma in MISRA C 2004, è possibile utilizzare piccoli numeri interi senza segno con operatori bit a bit (regola 10.5 ad esempio). Perché, se la promozione integrale porta a utilizzare valori firmati con operatori bit a bit? Penso di non capire alcune cose.
Non sono sicuro di aver capito la domanda, ma non dovrebbe importare se un un valore senza segno viene promosso a un tipo più grande. I numeri positivi e i numeri non firmati inferiori al valore massimo firmato sembrano uguali, ovvero il bit del segno è 0. I tipi interi senza segno – Caleb
non daranno luogo a int firmato a causa della promozione integrale. per esempio unsigned short diventerà sempre un int unsigned e mai un int firmato. – mch
@mch Non valido nei sistemi in cui breve e int hanno dimensioni diverse. Se un corto senza segno può rientrare in un 'int', verrà promosso a un' int', che è firmato. – Lundin