Suppose we number the bytes in a w-bit word from 0 (least significant) to w/8-1 (most significant). Write code for the following C function, which will return an unsigned value in which byte i of argument x had been replaced by byte b:
#include<stdio.h>#include<assert.h>unsignedreplace_byte(unsigned x,int i,unsignedchar b) {if(i <0) {printf("error: i is negative\n");return x; }if(i >sizeof(unsigned)) {printf("error: i is too big\n");return x; }// byte i should left shift i << 3 bitsunsigned mask = ((unsigned)0xff) << (i <<3);unsigned des_byte = ((unsigned)b) << (i <<3);return (x &~mask) | des_byte;}intmain() {unsigned x =0x12345678;assert(replace_byte(x,2,0xab)==0x12ab5678);assert(replace_byte(x,0,0xab)==0x123456ab);}