They are different types, which have different minimums and maximums. Unsigned cannot go less than 0, so the maximum is absolute value of the lowest possible SIGNED value, plus SIGNED max positive value, plus one (for zero):
AKA:
abs(signed_min) + signed_max + 1
Long's just use more bytes, and this varies per system. You will have to check your compiler's documentation.