Fill in code for the following C functions. Function srl performs a logical right shift using an arithmetic shift (given by value xsra), followed by other operations not including right shifts or division. Function sra performs an arithmetic right shift using a logical right shift (given by value xsrl), followed by other operations not including right shifts or division. You may use the computation 8 * sizeof(int) to determine w, the number of bits in data type int. The shift amount k cna range from 0 to w-1.
#include<stdio.h>#include<assert.h>unsignedsrl(unsigned x,int k) { /* Perform shift arithmetically */unsigned xsra = (int)x >> k;int w = (sizeof(int)) <<3;int mask = ((int)-1) << (w - k);return xsra &~mask;}unsignedsra(int x,int k) { /* Perform shift logically */int xsrl = (unsigned)x >> k;int w = (sizeof(int)) <<3;int mask = ((int)-1) << (w - k); /* Get the most significant bit unchanged, 0 for other bits */int m =1<< (w -1); /* Make mask unchanged if the most significant bit of x is 1, changed otherwise */ mask &=!(x & m) -1;return xsrl | mask;}intmain() {unsigned uval =0x12345678; // the most significant bit is 0int val =0x12345678;assert(srl(uval,4) == uval >>4);assert(sra(val,4) == val >>4); uval =0x87654321; // the most significant bit is 1 val =0x87654321;assert(srl(uval,4) == uval >>4);assert(sra(val,4) == val >>4);return0;}