単純に

long w =(long) ((unsigned long)a - (unsigned long)b);
int pls=-((-w)>>16L); //1以上ならなら 1
b = b+(w >> 8L);
b = b+pls; //算術右シフトで失った 0〜255 をカバーする

これでいいんじゃないの?