Wenn Sie eine Ganzzahl x angeben, wie würden Sie eine Ganzzahl y zurückgeben, die kleiner oder gleich x und ein Vielfaches von 64 ist?
Simply and
it mit der Bit-Umkehrung von (64-1):
Dies löscht im Grunde die unteren sechs Bits, das ist dasselbe wie das Abrunden auf ein Vielfaches von 64. Beachten Sie, dass dies für negative Zahlen auf negative Unendlichkeit gerundet wird, nicht auf Null, aber das scheint Ihre Frage zu sein erfordert.
Sie können das Verhalten hier in dieser Multi-of-Four-Variante sehen:
%Vor%Dies erzeugt:
%Vor% Beachten Sie, dass dies nur für Potenzen von zwei (wie 2 6 = 64) und Zweierkomplement funktioniert (der ISO-Standard schreibt diese Darstellung nicht vor - siehe hier für Details - aber ich habe nie eine C-Umgebung gesehen das benutzt es nicht und ich habe an Systemen von den schwächsten 8051 bis zu den größten Mainframes gearbeitet). Wenn Sie eine andere Zahl für den Divisor verwenden möchten, sollten Sie wahrscheinlich die richtigen mathematischen Funktionen wie floor
verwenden.
(x >> 6) << 6
Zuerst 6 Bits nach rechts verschieben, dann links - untere Bits mit Nullen gefüllt.
Keine Probleme mit dem Zeichen
BEARBEITEN: Ich denke, dass die meisten Compiler x / 64 * 64
(und jede Division / Multiplikation mit kleinen Potenzen von 2) auf den gleichen Code optimieren werden, so dass bis dahin keine wirkliche Notwendigkeit für eine solche Bit-Magie besteht Sie möchten, dass Ihr Code wirklich cool aussieht :)
(Und AndreyT denkt, es gibt sogar noch bessere Optimierungen für direkten Code, lesen Sie Kommentare zu seinem Beitrag )