SciFi ниже ответил, но есть ньюансы, вроде (unsigned int) - (signed long). Правило, как я понял, не в том, что использование unsigned делает всё выражение таковым, а что если не влазит в ширину типа, то тогда какой-то выбирается и там 10 пунктов, в итоге сходу не поймёшь.