Go

Bitwise Operations in Go

Recieve mask of flag N

mask := 1<<N

Recieve a full mask of 0b11111 of N flags

fullMask := 1<<N - 1

Check if flag is set

if flags&mask > 0 {
    // set
}

Toggle a flag is set

flags ^= mask

Get Lowest Bit

lowestBit := flags & -flags

Check only 1 bit is set in any position

if flags&(flags-1) == 0 {
    // only one bit is set
}

Iterate over Flags

remainingBits := flags
for remainingBits != 0 {
    // get lowest bit
    maskWithLowestBit := flags & -flags
    // flip off lowest bit
    remainingBits ^= lowestBit
    // do work with mask
}

Sorting masks by # of flags set

count := bits.OnesCount16(flags)