public static long rnd_avg32(long a, long b)
{
//return (long)( ((a | b)&0xffffffffl) - (( ((a ^ b)&0xffffffffl) & ((~((0x01)*0xffffffff01010101l)) >>> 1))) );
a = a & 0xffffffffL;
b = b & 0xffffffffL;
long remainder = (a ^ b) & 0x01010101L;
a = a & (~remainder);
b = b & (~remainder);
long ret = (long)(((ulong)(a + b)) >> 1) + remainder;
return ret;
}