int main(int argc, char **argv) { unsigned int u = -1; signed int s = -1; printf("%x %x\n", u, (int)(u >> 1)); printf("%x %x\n", s, (int)(s >> 1)); } --output-- ffffffff 7fffffff ffffffff ffffffff