Bit Hack - Runden auf ein Vielfaches von 8

8

kann jemand bitte erklären, wie das funktioniert (asz + 7) & amp; ~ 7; Es rundet asz auf das nächsthöhere Vielfache von 8 ab.

Es ist leicht zu sehen, dass ~ 7 11111000 (8-Bit-Darstellung) erzeugt und somit die letzten 3 Bits ausschaltet, so dass jede erzeugte Zahl ein Vielfaches von 8 ist.

Meine Frage ist, wie das Hinzufügen von Asz zu 7 vor dem Maskieren [Bearbeiten] das nächsthöhere [Ende Edit] Multiple von 8 erzeugt? Ich habe versucht, es auf Papier zu schreiben

wie:

%Vor%

Es scheint ein Muster zu entstehen, das ausgenutzt wurde. Kann mir jemand bitte helfen?

Danke euch allen für die Antworten. Es hat mir geholfen zu bestätigen, was ich dachte. Ich fuhr mit dem Schreiben des obigen Musters fort und als ich 10 überschritt, konnte ich deutlich sehen, dass die Nos zum nächsten "Block von 8" befördert werden, wenn ich das sagen kann.

Nochmals vielen Dank.

    
user212721 19.11.2009, 21:05
quelle

7 Antworten

17

Nun, wenn Sie versuchen würden down zu runden, brauchen Sie den Zusatz nicht. Wenn Sie nur den Maskierungsschritt ausführen, werden die unteren Bits gelöscht und Sie werden auf das nächstniedrigere Vielfache gerundet.

Wenn Sie nach oben runden wollen, müssen Sie zuerst genug addieren, um das nächste Vielfache von 8 "vorbeizubekommen". Dann führt Sie der gleiche Maskierungsschritt zurück zu dem Vielfachen von 8. Der Der Grund, warum Sie 7 wählen, ist, dass es die einzige Zahl ist, die garantiert "groß genug" ist, um Sie von einer beliebigen Zahl bis zum nächsten Vielfachen von 8 zu bringen, ohne ein zusätzliches Vielfaches zu erhöhen, wenn Ihre ursprüngliche Zahl bereits ein Vielfaches von 8 wäre >

Im Allgemeinen, um auf eine Zweierpotenz zu runden:

%Vor%     
Carl Norum 19.11.2009, 21:08
quelle
15

Es fügt der Zahl tatsächlich 7 hinzu und rundet ab ab.

Dies hat den gewünschten Effekt des Rundens auf das nächste Vielfache von 8. (Wenn Sie +8 statt +7 hinzufügen, wird ein Wert zwischen 8 und 16 ausgegeben.)

    
Broam 19.11.2009 21:08
quelle
4

Mit der +7 soll kein exaktes Vielfaches von 8 erzeugt werden, um sicherzustellen, dass Sie das nächsthöhere Vielfache von acht erhalten.

edit: Geschlagen um 16 Sekunden und mehrere Qualitätsreihenfolgen. Na gut, zurück zu lauern.

    
Simon Righarts 19.11.2009 21:08
quelle
3

Nun, die Maske würde ein exaktes Vielfaches von 8 erzeugen. Das Hinzufügen von 7 zu asz stellt sicher, dass Sie das nächste höhere Vielfache erhalten.

    
int3 19.11.2009 21:08
quelle
1

Ohne das +7 ist es das größte Vielfache von 8 weniger oder gleich der ursprünglichen Zahl

    
mfeingold 19.11.2009 21:09
quelle
1

Durch das Hinzufügen von 7 wird kein Vielfaches von 8 erzeugt. Das Vielfache von 8 wird mit ~ 7 erzeugt. ~ 7 ist das Komplement von 7, welches 0xffff fff8 ist (außer dass viele Bits in einem int vorkommen). Dies wird abgeschnitten oder abgerundet.

Das Hinzufügen von 7 stellt sicher, dass kein Wert niedriger als asz zurückgegeben wird. Sie haben bereits herausgefunden, wie das funktioniert.

    
wallyk 19.11.2009 21:11
quelle
0

Uhh, du hast gerade deine eigene Frage beantwortet ??? Indem Sie 7 hinzufügen, garantieren Sie, dass das Ergebnis bei oder über dem nächsten Vielfachen von 8 liegt. Das Abschneiden gibt Ihnen dann das Vielfache.

    
Zak 19.11.2009 21:09
quelle

Tags und Links