public static ulong Map(long src, long dest)
        {
            int   msbid = (int)Bitscan.ReverseIndex64((ulong)dest);
            ulong bitmask = 0xFFFFFFFFFFFFFFFF >> (63 - msbid);
            ulong subsrc, sumsub = 0, _src = (ulong)src, _dest = (ulong)dest;

            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(ulong dest)
 {
     return((int)Bitscan.ReverseIndex64(dest));
 }
        public static ulong Mask(ulong dest)
        {
            int msbId = (int)Bitscan.ReverseIndex64(dest);

            return(0xFFFFFFFFFFFFFFFF >> (63 - msbId));
        }