I suggest you use something like
#define UPPER(x) (x & (~0 << (sizeof(x) * 4)))
, limits.h - __WORDSIZE . , , , , int, , char ..
sizeof(x) * 4
( ), , - .
EDIT: - sizeof , , 4 (8/2), . , .
EDIT 2: ,
#define UPPER(x) (x & (~0 << (sizeof(x) * CHAR_BITS / 2)))
CHAR_BIT - , limits.h - . ( ), AFAIK ATM, .