Прошу прокомментировать код

Конечно. Очень полезная статья про смешивание типов.

Вот тут немного запутался.
Типы unsigned и int занимают 2 байта, тип long - 4 байта.
Приведение unsigned к long во втором случае логично. Но, не понимаю, почему в первом случае приведение осуществляется именно к unsigned?