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.
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%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.
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.
Tags und Links c bit-manipulation