Wie sollte da der Compiler entscheiden?
Er braucht sich eigentlich nicht zu entscheiden. Der C-Standard regelt ganz genau, was in einem solchen Fall zu tun ist. Wenn die beiden Typen die gleiche Größe haben, sich aber in der Signedness unterscheiden, "gewinnt" immer der unsigned Typ (der signed Typ wird also in den unsigned Typ gewandelt).