Hi Lucas,
looks good, just one idea...
...
+#define BIT_U8(b) ((u8)(BIT_INPUT_CHECK(u8, b) + BIT(b)))
+#define BIT_U16(b) ((u16)(BIT_INPUT_CHECK(u16, b) + BIT(b)))
+#define BIT_U32(b) ((u32)(BIT_INPUT_CHECK(u32, b) + BIT(b)))
+#define BIT_U64(b) ((u64)(BIT_INPUT_CHECK(u64, b) + BIT(b)))
considering that BIT defines are always referred to unsigned
types, I would just call them
#define BIT8
#define BIT16
#define BIT32
#define BIT64
what do you think?
Andi