my ($val, $mask) = (-1, 0x01000007); do { $val += ~$mask+1; $val &= $mask; printf "0x%08.8x\n", $val; } while ($val < $mask);