int64_t lstbt(int64_t val){ int64_t msk = val&(val-1); return log2(val^msk); }
what does the msk actually compute, and why are we return