CS计算机代考程序代写 /* shift.c

/* shift.c

* Demonstrates the different effects of right and left shifting
* in combination with signed and unsigned “8-bit” data.
*/
#include

int main() {
unsigned char x = 0x19;
// shifts are bitwise operators,
// so data type doesn’t matter until you interpret the data
unsigned char L1 = x<<2; unsigned char L2 = x<<3; unsigned char L3 = x<<4; printf("\n"); /* Note: printf statements can be hard to work with to view small data. The %d, %u, and %x specifiers extend to 32 bits and %c displays characters instead of values. */ printf("** Left Shift (<<) **\n"); // %.2X prints at least 2 capital hex digits (padding with 0), // using capital hex digits. printf("* Hex: x = 0x%.2X, L1 = 0x%.2X, L2 = 0x%.2X, L3 = 0x%.2X\n", x, L1, L2, L3); // cast to signed char to get sign extension // %4 just means to pad to 4 characters in length printf("* Signed: x = %4d, L1 = %4d, L2 = %4d, L3 = %4d\n", (char)x, (char)L1, (char)L2, (char)L3); printf("* Unsigned: x = %4u, L1 = %4u, L2 = %4u, L3 = %4u\n", x, L1, L2, L3); printf("*********************\n\n"); unsigned char xu = 0xF0; char xs = 0xF0; unsigned char R1u = xu>>3;
char R1s = xs>>3;
unsigned char R2u = xu>>5;
char R2s = xs>>5;
printf(“** Right Shift (>>) **\n”);
printf(“* Logical: xu = 0x%.2X = %4u\n”, xu, xu);
printf(“* R1u = 0x%.2X = %4u\n”, R1u, R1u);
printf(“* R2u = 0x%.2X = %4u\n”, R2u, R2u);
// cast to unsigned char to avoid sign extension for hex
printf(“* Arithmetic: xs = 0x%.2X = %4d\n”, (unsigned char)xs, xs);
printf(“* R1s = 0x%.2X = %4d\n”, (unsigned char)R1s, R1s);
printf(“* R2s = 0x%.2X = %4d\n”, (unsigned char)R2s, R2s);
printf(“**********************\n\n”);

// main function in C supposed to return an int
// (used to signal to OS)
return 0;
}