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 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)); }
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)); }