How about this? uint fill_bits(uint min_v, uint max_v) { uint mask = 0; for (int i = 0; i < 32; ++i) { if ((min_v | (1 << i)) <= max_v) mask |= (1 << i); } return mask; } max_c = min( max_a | fill_bits(min_b, max_b), max_b | fill_bits(min_a, max_a)); -- Rainer Deyke - rainerd at eldwood.com