[squeak-dev] Fun with bits

Nicolas Cellier nicolas.cellier.aka.nice at gmail.com
Fri Dec 11 07:13:42 UTC 2009


Some beautiful things I just rediscovered:

Isolating the low bit of an integer x
   (x bitAnd: 0 - x)
Thus x lowBit is also:
   (x bitAnd: 0 - x) highBit
I dont' think I saw above implementation anywhere...

Otherwise, tricks below are known for long, but it's sometimes usefull
to refresh memory...

Removing the lowest bit of an integer x
    (x bitAnd: x - 1)
This explains isPowerOfTwo:
    x > 0 and: [(x bitAnd: x - 1) = 0]
Counting the bits in a positive integer is just as simple as:
    nBits := 0.
    [x = 0] whileFalse: [
        nBits := nBits + 1.
        x := x bitAnd: x - 1].
Enumerating the bits in a positive integer:
    [x = 0] whileFalse: [
        aBlock value: x lowBit.
        x := x bitAnd: x - 1].

Nicolas



More information about the Squeak-dev mailing list