number = number | (number >> 1);
       number = number | (number >> 2);
       number = number | (number >> 4);
       number = number | (number >> 8);
       number = number | (number >> 16);
       return (number & ~(number >> 1));