То, что у Вас написано, должно выполняться как a = (unsigned long)((int)b);, что и наблюдается.
E-mail: info@telesys.ru