public static uint Map(int src, int dest)
        {
            uint subsrc,
                 sumsub = 0,
                 _src   = (uint)src,
                 _dest  = (uint)dest;

            int  msbid   = (int)Bitscan.ReverseIndex32((uint)dest);
            uint bitmask = 0xFFFFFFFF >> (31 - msbid);

            for (; ;)
            {
                subsrc = (_src & bitmask);

                if (subsrc > _dest)
                {
                    subsrc -= _dest;
                }

                sumsub += subsrc;

                if (sumsub > _dest)
                {
                    sumsub -= _dest;
                }

                _src >>= msbid;

                if (_src == 0)
                {
                    return(sumsub);
                }
            }
        }
 public static int MsbId(uint dest)
 {
     return((int)Bitscan.ReverseIndex32(dest));
 }
        public static uint Mask(uint dest)
        {
            int msbid = (int)Bitscan.ReverseIndex32(dest);

            return(0xFFFFFFFF >> (31 - msbid));
        }