В вашем коде есть только одно приведение:
uiNum = (unsigned short)sNum;
Остальные вещи, которые вы называете приведениями, называются (неявными) преобразованиями в языке Си. В конверсиях нет скрытых промежуточных шагов. Если вы хотите пройти через промежуточный тип, вы можете принудительно вызвать его через приведение или присвоение переменной этого типа.
Во-вторых, строка:
short sNum = 57000;
имеет поведение, определяемое реализацией. Вам следует избегать кода, который преобразует (неявно или через приведение) значения в подписанные типы, в которые значение не помещается.
Наконец, вам не следует задавать подобный вопрос о "C / C ++". Такого языка не существует, и системы типов (даже для простых целочисленных типов) достаточно различаются в двух языках, поэтому ответы на многие вопросы будут разными в зависимости от того, какой язык вы фактически используете.