/*! \file cbits.c Illustrating concepts discussed in 03-Cbits.txt notes. To compile use the following command: gcc -Wall -g cbits.c To run type: ./a.out */ #include int main() { // Checking the 2's complement representation for 30 and -75. printf("==== Hex representation for 2's complement of 30 and -75\n"); int x = 30; printf("x = 0x%X\n", x); x = -75; printf("x = 0x%X\n", x); // shift right logical printf("\n==== shift right logical\n"); unsigned short y = 0xFFFF; printf("y = 0x%hX = %hu\n", y, y); printf("y >> 2 = 0x%hX = %hu\n", y >> 2, y >> 2); // shift right arithmetic printf("\n==== shift right arithmetic\n"); short z = -4; printf("z = 0x%hX = %hd\n", z, z); printf("z >> 2 = 0x%hX = %hd\n", z >> 2, z >> 2); // shift left logical printf("\n==== shift left logical\n"); printf("z = 0x%hX = %hd\n", z, z); printf("z << 2 = 0x%hX = %hd\n", z << 2, z << 2); // masking printf("\n==== masking\n"); unsigned int num = 0x55555555; unsigned int mask = 0x80000000; int MSB = mask & num; printf("MSB = %d\n", MSB); mask = mask >> 1; printf("next bit = %d (0x%X)\n", mask & num, mask & num); // Big-Endian or Little-Endian? printf("\n==== big-endian or little-endian\n"); unsigned int a = 0x41424344; char *ptrChar = (char *) &a; int i; for ( i = 0; i < sizeof( unsigned int ); ++i ) { printf( "%c ", ptrChar[i] ); } printf("\n"); return 0; }