unsigned myduck(unsigned a, unsigned b) { unsigned i; unsigned j = 2; /* Accumulator */ unsigned t1, t2; unsigned result = 0; for (i = 0; i < sizeof(a)*CHARBITS - 1; i++) { t1 = a % j; /* Find current bits */ t2 = b % j; a -= t1; /* Strip lower bits */ b -= t2; if (t1) if (t2) result += j; j += j; } if (a) if (b) result += j; }