In C

2009-04-16 4 views
4

Größere Ganzzahl zu kleiner vorzeichenloser Typ Umwandlung Ich wurde durch k & r goint. I wurde auf Seite folgende Zeilen Problem in Verständnis mit 197 (Abschnitt A6)In C

Integral Umrechnungen: beliebige ganz Zahl ist auf einen gegebenen Typen ohne Vorzeichen durch umgewandelt, um den kleinsten nicht negativ Wert zu finden, die zu diesem ganzzahlige kongruent , modulo ein mehr als der größte Wert, der im unsigned-Typ dargestellt werden kann.

Kann jeder Körper dies in einem kleinen Detail erklären. Danke

Antwort

6

beliebige ganze Zahl ist, in einen bestimmten vorzeichenlosen Typ konvertiert indem der kleinste nicht negative Wert gefunden wird, der kongruent zu dieser ganzen Zahl ist, modulo um eins mehr als der größte Wert, der im unsignierten Typ dargestellt werden kann.

Lassen Sie sich dieses Bit nimmt nach und nach und nach hinten:

Was ist der größte Wert ist, der in dem unsigned Typ der Breite n Bits dargestellt werden kann?

2^(n) - 1. 

Was ist ein mehr als dieser Wert?

2^n. 

Wie erfolgt die Umwandlung?

unsigned_val = signed_val % 2^n 

Nun, das, warum ein Teil: Der Standard schreibt nicht vor, was Darstellung verwendet wird Bit. Daher der Jargon. In einer Zweierkomplementdarstellung - die bei weitem am häufigsten verwendet wird - ändert diese Umwandlung das Bitmuster nicht (es sei denn, es gibt natürlich eine Verkürzung).

Weitere Informationen finden Sie unter Integral Conversions aus dem Standard.

6

Es bedeutet, dass nur niederwertige Bits zählen und höherwertige Bits verworfen werden.

Zum Beispiel:

01111111 11111111 11110000 00001111 

wenn sie auf ein Bit 16 umgewandelt unsigned short wird:

11110000 00001111 

dies wirksam wird mathematisch in ausgedrückt:

target_value = value % (target_type_max+1)   (% = modulus operator)