2017-11-29 8 views
-2

Im folgenden Code werden bitweise Operationen an einer 8-Bit-Ganzzahl ohne Vorzeichen ausgeführt.Bitweise Operationen, die an einem 8-Bit-Zeichen ohne Vorzeichen ausgeführt werden

uint8_t i = 10; 
uint8_t j = i>>2; 

In diesem Beispiel wird auf einen isigned int und Wert auf 8 Bits unsigned int zugeordnet befördert. Ist es sicher, int int 8 Bit unsigned int zu konvertieren?

+1

Ich glaube nicht, dass es wichtig ist: Zuweisung wird das Ergebnis abschneiden ja. Und mit deinen Werten ist es kein Problem. aber deine Frage hat viele Tippfehler. Kannst du es bearbeiten? –

+3

Die Shift-Operation unterliegt einer ganzzahligen Heraufstufung. –

+0

Da Sie teilen, wird das Ergebnis gleich sein. –

Antwort

2

Nr

In arithmetischen Ausdrücken werden die kleineren Typen int wenn möglich umgesetzt und ansonsten zu unsigned int (siehe 6.3.1.1p2).

Praktisch

uint8_t i = 10; 
puts(_Generic(i>>2, uint8_t: "u8", int: "int", unsigned int: "uint")); 

ausgeben sollte "int", wie sollte

uint8_t i = 10, j = 2; 
puts(_Generic(i>>j, uint8_t: "u8", int: "int", unsigned int: "uint")); 

(Im ersten Beispiel würde i auch int befördert zu werden, weil 2 vom Typ int und weil usual arithmetic conversions würde gelten.)

Verwandte Themen