CHAR_BIT es una macro que depende de la biblioteca estándar de C, está en la librería limits.h
Estas macros, como ya he dicho, están pensadas para ayudar a la portabilidad de código pues hacen que no se deba modificar de una plataforma a otra aún si las especificaciones son diferentes.
De hecho para una máquina que trabaje con caracteres de 7 bits, en su biblioteca asociada a su lenguaje C, te encontrarás con que CHAR_BIT tiene el valor 7, mientras que en un moderno computador de sobremesa, en su biblioteca tendrá definido CHAR_BIT con el valor 8.
No existen unos valores invariables, para todas las arquitecturas del mundo, de las macros de la biblioteca de C, más sabiendo que es un lenguaje dependiente de la arquitectura. Las macros estarán definidas para encajar con esa arquitectura para la que está pensada esa biblioteca.
Es más, si usaras números mágicos en tus programas te encontrarías con un archivo fuente que te funciona bien en un sitio, y sin embargo lo portas a otra máquina diferente y te falla.
limits.h existe precisamente para esto. Un entero int no tiene un tamaño igual en un procesador de 32 bits que en un de 8. Así mediante dicha librería el programa puede saber si va a exceder el límite del tipo de dato.