Interessierter schrieb:
> Ich würde die Wirkung etwa so zusammenfassen:
> Das jeweilige Bit k (0 bis n-1 eines n-Bit Wortes), ist 0 wenn jedes der
> Bits von k bis n-1 Null ist bzw. es ist Eins wenn irgendeines der Bits
> Eins ist.
Ich würde die Arbeitsweise so zusammenfassen.
Gegeben irgendein 8 Bit Wert
wobei uns die mit x markierten Bits nicht wirklich interessieren. Warum
wird gleich klar.
Man nehme diesen Wert und verschiebe ihn um 1 Stelle nach rechts.
weden die beiden Zahlen miteinander verodert
1 | 001x xxxx
|
2 | | 0001 xxxx
|
3 | ------------
|
4 | 0011 xxxx
|
dann entsteht ein Ergebnis, bei dem sich das am weitesten links sitzende
1 Bit auf jeden Fall nach rechts dupliziert hat.
Das ganze nochmals, diesmal aber mit einer Verschiebung um 2 Stellen
1 | 0011 xxxx -> 0000 11xx
|
2 |
|
3 |
|
4 | 0011 xxxx
|
5 | | 0000 11xx
|
6 | ------------
|
7 | 0011 11xx
|
Aus den 2 Stück 1 Bits sind jetzt schon 4 geworden.
Mit jeder Wiederholung des Prozesses (und Verdopplung der
Schiebedistanz, verdoppelt sich auch die Anzahl der garantierten 1 Bits.
Bis man letzten Endes, in diesem Beispiel bei
landet. Die am weitesten links stehende 1 wurde nach rechts dupliziert,
bis rechts von ihr nur 1 Bits stehen.
Dazu jetzt noch die Beobachtung in den Binärzahlen, dass alle 2-er
Potenzen ausschliesslich ein einzelnes 1 Bit haben
1 | 0000 0001 1
|
2 | 0000 0010 2
|
3 | 0000 0100 4
|
4 | 0000 1000 8
|
5 | 0001 0000 16
|
6 | ....
|
und die jeweils um 1 kleinere Zahl aus lauter 1 Bits besteht, die rechts
vom 1-Bit der 'zugehörenden' 2-er Potenz stehen
1 | 0000 0001 1 0000 0000 0
|
2 | 0000 0010 2 0000 0001 1
|
3 | 0000 0100 4 0000 0011 3
|
4 | 0000 1000 8 0000 0111 7
|
5 | 0001 0000 16 0000 1111 15
|
6 | 0010 0000 32 0001 1111 31
|
7 | 0100 0000 64 0011 1111 63
|
8 | 1000 0000 128 0111 1111 127
|
9 | 1 0000 0000 256 1111 1111 255
|
ist klar, wie es dann weiter geht. Nach der Verschiebeorgie noch 1
dazuzählen und du hast die aufgerundete 2-er Potenz die zu der Zahl mit
dem 1 Bit an der (beliebigen) höchsten Stelle steht.