Неподписанное преобразование в C

Гарантировано ли следующее выполнение или реализация?

unsigned int a = 4294967294; signed int b = a; 

Значение b равно -2 на gcc.

От C99 (§6.3.1.3 / 3) В противном случае новый тип подписан и значение не может быть представлено в нем; либо результат определяется реализацией, либо генерируется сигнал, определяемый реализацией.

Преобразование значения в signed int определяется реализацией (как вы правильно упомянули из-за 6.3.1.3p3). В некоторых системах, например, это может быть INT_MAX (насыщающее преобразование).

Для gcc поведение реализации определено здесь:

Результат или сигнал, вызываемый преобразованием целого числа в целочисленный тип со знаком, когда значение не может быть представлено в объекте такого типа (C90 6.2.1.2, C99 6.3.1.3).

Для преобразования в тип ширины N значение уменьшается по модулю 2 ^ N в пределах диапазона типа; сигнал не поднимается.

http://gcc.gnu.org/onlinedocs/gcc/Integers-implementation.html