Hallo, ich schifte eine Variable mit Typ Integer zwei mal nach rechts (>>2). Ich möchte nämlich durch 4 dividieren. Das Problem ist, dass die oberen zwei Bits mit 1 gefüllt werden (entspricht dann nicht einer Division durch 4). Wie stelle ich das am einfachsten an, dass diese mit 0 gefüllt werden? Vielen Dank für eure Hilfe!
Deine Variable muss vor den SHiften unsigned sein.
Chris schrieb: > Hallo, > > ich schifte eine Variable ist das so ähnlich wie: ich downloadete eine Datei? > mit Typ Integer zwei mal nach rechts (>>2). > Ich möchte nämlich durch 4 dividieren. > > Das Problem ist, dass die oberen zwei Bits mit 1 gefüllt werden > (entspricht dann nicht einer Division durch 4). Wie stelle ich das am > einfachsten an, dass diese mit 0 gefüllt werden? 'Signed' - 'Unsigned' als Stichwörter zur Suche
@Chris (Gast) >ich schifte eine Variable mit Typ Integer zwei mal nach rechts (>>2). >Ich möchte nämlich durch 4 dividieren. Normale Integer sind vorzeichenbehaftet. >Das Problem ist, dass die oberen zwei Bits mit 1 gefüllt werden >(entspricht dann nicht einer Division durch 4). Doch, nur halt mit Vorzeichen. Das nennt man arithmetisches Rechtsschieben. Dort wird das oberste Bit (MSB) nachgeschoben. Im Gegensatz zum logischen Rechtsschieben, dort wird immer 0 nachgeschoben. > Wie stelle ich das am einfachsten an, dass diese mit 0 gefüllt werden? Die Variable als unsigned definieren.
Weil du eine negative vorzeichenbehaftete Zahl shiftest. https://en.wikipedia.org/wiki/Arithmetic_shift#Non-equivalence_of_arithmetic_right_shift_and_division Einfach durch vier dividieren, der Compiler weiß schon selbst wie er das optimieren soll.
vn nn schrieb: > Einfach durch vier dividieren, der Compiler weiß schon selbst wie er das > optimieren soll. Aber er korrigiert nicht selbstständig Fehler im Code, z.b. einen falschen Datentyp.
vn nn schrieb: > Einfach durch vier dividieren, der Compiler weiß schon selbst wie er das > optimieren soll. Wenn Du eine negative Zahl durch 4 teilst, bleibt sie negativ - und damit auch weiterhin das oberste Bit gesetzt. Genau, was der TO vermeiden wollte. Du hast also mit dem Teilen gegenüber dem Schieben gar nichts gewonnen.
Hier wäre es sinnvoll sich mal etwas mit den Grundlagen zu beschäftigen. Sprich zum einen mit den Zweierkomplement für die Darstellung negativer Zahlen und mit dem Unterschied zwischen logical und arithmetic shifting.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.