Bezug zu einem previous question, kann ich nicht einige Regeln von MISRA C 2004Verwendung von kleiner ganzer Zahl mit Bits Operator in C
In ISO C99 draft 2007, in 6,5 Abschnitt §4 verstehen:
Einige Betreiber (der unäre Operator ~ und die binären Operatoren < <, >>, &,^und |, zusammen als bitweise Operatoren beschrieben) müssen Operanden haben, die einen Integer-Typ haben. Diese Operatoren liefern Werte, die von den internen Repräsentationen von Ganzzahlen abhängen, und sie haben implementierungsdefinierte und undefinierte Aspekte für signierte Typen.
Ok, die Verwendung einer vorzeichenbehafteten Ganzzahl mit bitweisen Operatoren kann zu undefiniertem Verhalten führen (und ergibt keinen Sinn).
Eine gute Lösung ist die explizite Konvertierung in einen breiteren, vorzeichenlosen Integer-Typ, um die integrale Heraufstufung zu umgehen und dann keinen signierten Wert mit bitweisen Operatoren zu verwenden (siehe zugehörige Antworten meiner vorherigen Frage).
Aber in MISRA C 2004 ist die Verwendung kleiner vorzeichenloser Ganzzahlen mit bitweisen Operatoren möglich (Regel 10.5 zum Beispiel). Warum, wenn integrale Werbung dazu führt, signierte Werte mit bitweisen Operatoren zu verwenden? Ich denke, ich verstehe einige Dinge nicht.
Ich bin mir nicht sicher, ob ich die Frage verstehen, aber es sollte keine Rolle, ob ein Wert ohne Vorzeichen zu einem größeren Typ gefördert wird. Positive Zahlen und vorzeichenlose Zahlen, die kleiner als der Wert mit maximalem Vorzeichen sind, sehen gleich aus, d. H. Das Vorzeichenbit ist 0. – Caleb
vorzeichenlose Integer-Typen ergeben aufgrund der ganzzahligen Heraufstufung kein signed int. Zum Beispiel wird unsigned short immer zu einem unsigned int und niemals zu einem signed int. – mch
@mch Nicht wahr auf Systemen, wo kurz und int unterschiedliche Größe haben. Wenn ein vorzeichenloser short in ein 'int' passen kann, wird er in ein' int' befördert, das signiert ist. – Lundin