Hola:
char es el dato mas pequeño que hay, son 8 bits.
El uint es un unsigned int y ocupa lo mismo que un int, solo que no admite negativos, pero a cambio llega a un positivo más alto.
También hay short, que es un entero corto, pero en los ordenadores actuales ocupa 2 bytes (16 bits), frente al entero normal que ocupa 32 bits.
No recuerdo la sintaxis, pero C permite agrupar variables de menos de 8 bits dentro de una variable estandard, de forma que si tienes, por ejemplo, cinco variables booleanas de 1 bit, puedes hacer que ocupen 5 de los bits de una variable char, desaprovechando los otros 3. Si tienes interés y no lo encuentras en google, puedo buscar cómo es exactamente.
Se bueno.