PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bitweise Verschiebung in C++



GSlash
14.11.2004, 23:55
hi,

kann mir jemand sagen wie ich in C++ die Bits verschieben kann ohne dass sie irgendwann "rausfallen", also an einer seite raus-, und an der anderen wieder reinkommen?
Ich hoffe ihr könnt mir schnell weiterhelfen.

mfg
GSl4sh

Ynnus
15.11.2004, 00:15
Ist zwar kein C++, aber da c++ mit Sicherheit inlineAssembler besitzt, solltest du diese Variante vielleicht in Anschein nehmen:

ROR Variable,Bit
oder
ROL Variable,Bit

Das erste Rotiert die Anzahl der in "Bit" Angegebenen Bit nach rechts, das 2te Beispieln nach links.

Ist übrigends eine Methode um Zahlen zu teilen oder zu verdoppeln. Nach links veschieben verdoppelt den Wert der Variable, nach Rechts verschieben verkleinert den Wert um die Hälfte. Ganze durch 2 teilbare Zahlen sind allerdings Vorrausgesetzt, sonst gibt's unschöne Float-Werte.

Firzen
15.11.2004, 09:11
In C++ musst du das ein bisschen umschreiben:

a=(a<<5)|(a>>(sizeof(a)*8-5));
Das entspricht a<<5 wobei die ersten 5 Stellen nicht wieder rausfallen.

lg Firzen

cornuto
15.11.2004, 11:01
bitshiften kannst du auf zwei arten, entweder wie Frizen beschrieben hat oder mit multiplikationen mit 2er potenzen. dh 2^1 verschieben um ein bit, 2^2 verschieben um 2 bit und so weiter. wird bei serialisierung so gebraucht.

Dingsi
15.11.2004, 14:43
²Sunny: Nein, so einfach ist das mit Inline-Assembly nicht in C++. Erstens kommt es auf den Compiler an, und wenn der Compiler es denn vielleicht beherrscht unterscheidet sich die Syntax manchmal recht stark von anderen Standards oder dem "normalen" ASM wie du es zeigst. Die Syntax des Inline-ASM von GNU-CC hab ich z.B. immernoch nicht verstanden. o_O°.

Das wollte ich nur mal loswerden. Ansonsten hat Firzen recht. ^^.

Ynnus
15.11.2004, 15:57
Nuja, bei mir geht's so mit InlineAssembly ganz easy, daher hab ich es hier mal so gepostet. Muss ja nicht überall so gehen.