Implizite Typumwandlung in C (Konvertieren von 32 Bit unsigned in 8 Bit u int)

7

Meine Frage sieht sehr ähnlich aus

So speichern Sie eine 64-Bit-Ganzzahl in zwei 32-Bit-Ganzzahlen und konvertieren sie wieder zurück

(Ich habe ein vorzeichenloses 32-Bit, das ich in 4 vorzeichenlose 8-Bit-Variablen in C setzen muss)

aber

Meine Frage ist, ob das:

%Vor%

garantiert, dass a mit den acht rechten Bits statt mit den acht Bits ganz links gefüllt wird?

    
Peter 28.06.2010, 14:46
quelle

4 Antworten

15

Ja. Tun Sie dies entweder:

%Vor%

Oder das:

%Vor%

Im ersten Beispiel ist nicht von der Endlichkeit der Plattform abhängig, das zweite ist .

    
Nikolai Fetissov 28.06.2010 14:58
quelle
9

Ich weiß nicht, was Sie mit ganz rechts und ganz links meinen (Endian?), aber C garantiert, dass a die 8 niedrigstwertigen (niedrigstwertigen) Bits von b enthält. Das heißt, die Zuweisung entspricht logisch:

%Vor%     
Konrad Rudolph 28.06.2010 14:52
quelle
5

Aus dem C-Standard ist garantiert, dass a == b % (max_of_uint8_t + 1) , d. h. die niedrigstwertigen 8 Bits. In §6.3.1.3 (Ganzzahlen mit und ohne Vorzeichen):

  
  1. Wenn ein Wert mit Integer-Typ in einen anderen Integer-Typ als _Bool konvertiert wird, ist der Wert unverändert, wenn der Wert durch den neuen Typ dargestellt werden kann.
  2.   
  3. Andernfalls, wenn der neue Typ nicht vorzeichenbehaftet ist, wird der Wert durch wiederholtes Addieren oder Subtrahieren von mehr als dem maximalen Wert, der im neuen Typ dargestellt werden kann, konvertiert, bis der Wert im Bereich des neuen Typs liegt.
  4.   

Verwenden Sie a = b & 0xff , wenn Sie sicher sein müssen.

    
kennytm 28.06.2010 14:59
quelle
0

Sie können sich die Gewerkschaftserklärung ansehen. Wenn Sie garantieren können, dass sich der Prozessor / die Datenquelle nicht ändert, kann ich davon ausgehen, dass Sie endianness "

annehmen können     
Jay 28.06.2010 14:58
quelle

Tags und Links