> So you would use int if your expression can yield a negative value.
Of course, but as you say it yourself: if. It seems a bit too general to abandon unsigned completely because there are cases where it is not appropriate. By that logic there wouldn't be much types one can use at all.
(You can't thus check for int overflow by checking for wraparound, see http://c-faq.com/misc/intovf.html)