大小比較の代わりに符号ビットを見てるのね。なるほど
とすると円はこんな感じだろーか

#define POW2(aNum) (aNum * aNum)

unsigned int HitCheck(円 *a, 円 *b) {
int distancePow2 = POW2(a->x - b->x) + POW2(a->y - b->y);
int rPow2 = POW2(a->r +b->r);
return ((unsigned int) (distancePow2 - rPow2)) >> 31;
}