/* * Shift operations * * Right shifts might use either arithmetic shifts or logical shifts. * * This small piece of code should identify which one is used */ #include int main(void) { /* Using char so we care for a single byte only */ char x, a; unsigned char y, b; /* bin 10101001 */ a = b = 0xA9; printf("Original signed variable: 0x%.2x\n", a); /* * Signed data variables are right shifted using Arithmetic shift. i.e. * left bits are filled with a copy of the most significant bit of the * original value */ x = a >> 3; printf("Signed right shift by 3: 0x%.2x\n\n", x); printf("Original unsigned variable: 0x%.2x\n", b); /* * Unsigned data variables are right shifted logically. i.e. left bits * are just filled with zeros */ y = b >> 3; printf("Unsigned right shift by 3: 0x%.2x\n", y); return 0; }