a>>=1;
-
void funktion (int a) { while (a) { cout<< a%2; a>>=1; } }HALLO.
Könnte mir bitte jemand erklären, was diese Funktion bewirkt? Also a%2 teilt a durch 2. Aber was macht dann '>>=' ?Danke.
H.W.
-
Ist eine kürzere Schreibweise für a = a >> 1;
> 1 ist ein Shift nach rechts um 1 Position.
-
a%2 berechnet den REST der division durch 2.
a >> 1, der bit-shift, teilt a durch 2 und schmeißt den rest weg.
-
Was meinst du mit einem 'Shift nach rechts'?
Warum teilt es a gerade durch '2'? Steht doch '1' dort?

-
Hans Wurst schrieb:
Was meinst du mit einem 'Shift nach rechts'?
Warum teilt es a gerade durch '2'? Steht doch '1' dort?

es teilt es durch 2n in dem Fall um 21 (=2)
-
bit == binary digit
1 bit == 2^1 == 2
das shiften (verschieben) der bits um 1 nach rechts teilt also durch 2, das shiften um z. Bsp. 3 nach rechts würde durch 8 teilen, denn 2^3 ergibt 8. dementsprechend bedeutet das shiften der bits um x nach links multiplikation mit 2^x.
tipp: erkundige dich mal bezüglich der bits über das Dualsystem bzw. allgemein über Stellenwertsysteme.
-
> 1 ist ein Shift nach rechts um 1 Position.
Bei einem "Shift" wird jedes einzelne Bit einer Vaiable um eine vorgegebene Anzahl von Stellen nach rechts bzw. links geschoben. Die rechts bzw. links frei werdenden Bits werden mit Nullen aufgefüllt. In der Praxis sieht das z.B. so aus:
Beispielmuster:
Anwendung:
variable >> 1;100000
Und jetzt ein Shift nach rechts, um eine Stelle:
010000
Um wie viele Stellen alle positiven (1) Bits verschoben werden sollen, gibt man rechts neben dem >> bzw. << Operator an.
Ein gutes Tutorial zu dem Thema: http://www.cpp-tutor.de/cpp/le03/le03_02.htm
MfG mikey.
-
dazu habe ich jetzt mal ne frage:
wenn ich jetzt ein rechts shift mit 00000001 mache, bekomme ich ja 00000000. wenn ich jetzt ein links shift mache, bekomme ich doch trotzdem wieder 00000000, oder?Mfg Ominion
-
Hallo
Binärstellen werden beim Abschneiden nicht gemerkt, die Lücke wird immer mit 0 aufgefüllt.
bis bald
akari
-
Schade, dachte ich mir, danke
Mfg Ominion
-
akari schrieb:
die Lücke wird immer mit 0 aufgefüllt.
nicht immer

-
geht es vllt. noch genauer? oder soll das soviel heißen, dass immer 0 oder 1 zufällig eingefügt wird?
Mfg Ominion
-
Ominion schrieb:
oder soll das soviel heißen, dass immer 0 oder 1 zufällig eingefügt wird?
nö, zufällig ist es nicht.
-
vielleicht möchte er uns damit sagen dass die vorzeichenbits nicht mitgeshiftet werden oder ähnliches..
oder er will einfach nur mal wieder rumtrollen..
-
edit: undefiniert
-
Beim linksschieben wird _immer_ mit 0 aufgefüllt. Ausser man schiebt um gleich viel oder mehr Bits als der Datentyp hat.
Beim rechtsschieben von positiven Integern gilt dasselbe.
Beim rechtsschieben von negativen Integern (2er-Komplement) ist nicht vorgeschrieben wie geschoben wird, entweder
a) logisch, oder
b) arithmetischBei a) wird mit Nullen aufgefüllt, bei b) mit Einsen. Das unterscheidet sich von Plattform zu Plattform.
-
obertroll 'ten' möchte euch z.b. mitteilen, dass bei 'right shifts' nach iso/iec specification nicht definiert ist, was links rein kommt...

-
Mir ist auch aufgefallen, dass bei Right-Shift mit negativen Zahlen gcc, zum Beispiel, mit Einsern auffüllt.
Kann es sein, dass diese Funktion die binär-Schreibweise eines ints rückwärts wiedergibt?
-
mich hatte das nur interessiert, weil ich gerade dabei bin, einen verschlüsselungs-algorithmus zu entwickeln...
Mfg Ominion
-
ne0r schrieb:
Kann es sein, dass diese Funktion die binär-Schreibweise eines ints rückwärts wiedergibt?
nee, es soll einfach nur das vorzeichen erhalten bleiben und sich trotzdem rechnerisch wie 'ne division durch eine zweierpotenz verhalten. klappt natürlich nicht ganz, denn wenn man lange genug shiftet landet man bei -1 und nicht bei 0
