C: uint16_t comportamiento de resta en gcc

Estoy tratando de restar dos entradas sin firmar y comparar el resultado con un int firmado (o un literal). Cuando usasunsigned int Los tipos de comportamiento son los esperados. Cuando usasuint16_t (desdestdint.h) escribe el comportamiento no es lo que yo esperaría. La comparación se realizó utilizando gcc 4.5.
Dado el siguiente código:

unsigned int a;
unsigned int b;

a = 5;
b = 20;

printf("%u\n", (a-b) < 10);

La salida es 0, que es lo que esperaba. Tanto a como b están sin signo, y b es más grande que a, por lo que el resultado es un gran número sin signo que es mayor que 10. Ahora, si cambio a y b para escribir uint16_t:

uint16_t a;
uint16_t b;

a = 5;
b = 20;

printf("%u\n", (a-b) < 10);

La salida es 1. ¿Por qué es esto? ¿El resultado de la resta entre dos tipos uint16_t se almacena en un int en gcc? Si cambio el10&nbsp;a10U&nbsp;la salida es nuevamente 0, lo que parece ser compatible con esto (si el resultado de la resta se almacena como un int y la comparación se hace con un int sin signo, los resultados de la resta se convertirán en un int sin signo).