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

/* shift2.c

* Inputs:
* – direction: shift left (0) or right (else)
* – number: shift amount (number of bits)
*/
#include
#include

void print_binary(unsigned char number, int size)
{
if (!number)
{
putc(‘0’, stdout);
return;
}
if (size == 1)
{
putc((number & 1) ? ‘1’ : ‘0’, stdout);
return;
}
print_binary(number >> 1, size – 1);
putc((number & 1) ? ‘1’ : ‘0’, stdout);
}

int main(int argc, char *argv[])
{
unsigned char dir, num, pos;

// Want two arguments, but executable name is always argv[0]
if (argc != 4)
{
printf(“Usage: ./shift2 \n”);
printf(” direction: shift left (0) or right (1)\n”);
printf(” number: shift amount (number of bits)\n”);
return 1;
}

// atoi() converts strings to integers
dir = atoi(argv[1]);
num = (int)strtol(argv[2], NULL, 16);
pos = atoi(argv[3]);

if (dir) // shift right
{
print_binary(num, sizeof(num) * 8);
printf(” >> %d = “, pos);
print_binary(num >> pos, sizeof(num) * 8);
printf(“\n”);
// printf(“%x >> %x = %x\n”, num, pos, num >> pos);
}
else
{ // shift left
print_binary(num, sizeof(num) * 8);
printf(” << %d = ", pos); print_binary(num << pos, sizeof(num) * 8); printf("\n"); // printf("%x << %x = %x\n", num, pos, num << pos); } return 0; }