Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Please answer the question accordingly and show appropriate result on screen. Wr

ID: 3871080 • Letter: P

Question

Please answer the question accordingly and show appropriate result on screen. Write the code in C programming

Clearing a bit
Write a function that accepts as input an unsigned char, and an integer bitNum (range 0-7) and using the “shift”, “and” and “not” operators clears the bit at position bitNum (namely, sets the bit at position bitNum to 0). The function returns modified character.   For example, if the bit sequence of a char is 00010100 and bitNum == 4 then the answer should return 00000100.   unsigned char clearBit(unsigned char c, int bitNum);

Explanation / Answer

#include <stdlib.h>

typedef struct bitmap{   

unsigned b7:1;

unsigned b6:1;

unsigned b5:1;

unsigned b4:1;

unsigned b3:1;

unsigned b2:1;

unsigned b1:1;

unsigned b0:1;

};

union bits{   

unsigned char ch;

struct bitmap x;

} b;

int setbit(char ch,int bitnum){

static int values[9]={1,2,4,8,16,32,64,128};

return (ch | values[bitnum]);

}

int clrbit(char ch, int bitnum){

static int values[9]={254,253,251,247,239,223,191,127};

return (ch & values[bitnum]);

}

char *bitpattern(char *dest, char ch){   

const char,

zero = '0';

union bits{   

unsigned char ch;

struct bitmap x;

} b;

int i;

for(i=0;i<8;i++)*(dest+i)=zero;

b.ch = (unsigned)ch;

if(b.x.b7) *(dest+0)=one;

if(b.x.b6) *(dest+1)=one;

if(b.x.b5) *(dest+2)=one;

if(b.x.b4) *(dest+3)=one;

if(b.x.b3) *(dest+4)=one;

if(b.x.b2) *(dest+5)=one;

if(b.x.b1) *(dest+6)=one;

if(b.x.b0) *(dest+7)=one;

return dest;

}

int ffc(register unsigned src){

register int i=0;

if(src<255)

for(i=1;src&1;src=src>>1,i++);

return i;

}

int ffs(unsigned char src){   

register int i=0;

if(src)

for(i=1;~src&1;src=src>>1,i++);

return i;

}

int chrcnt(register char *szsrc,const int ch){

register int i=0,

cnt=0;

for(i=0;*(szsrc+i);i++)

if(*(szsrc+i)==ch) cnt++;

return cnt;

}

int isbitset(unsigned char ch,const int check){

const int values[8]={1,2,4,8,16,32,64,128};

unsigned int chk=0;

if (check <0 || check > 7) return (-1);

chk=ch;

chk = ch & (~values[chk]);

return !(ch==chk);

}

int isbitclr(unsigned char ch,const int check){

return !(isbitset(ch,check));

}

int blockbit(char *dest, char *src, const int cnt,const int method){

int flag=0;   

unsigned char odd=0x00;

register char *buf, *s;

char tmp[9];

int i=0;

int j=0;

if(method < 0 || method > 1 || cnt < 0 ) return (-1);

if(cnt==0) return 0;

flag=cnt%8;

j=cnt/8;

switch (method){

case (-1):

for(i=0;i<=j;i++) *(dest+i)=*(src+i);

break;

case 0:

for(i=0;i<=j;i++) *(dest+i)= *(dest+i) | *(src+i);

break;

  

case 1:

for(i=0;i<=j;i++) *(dest+i)= *(dest+i) & *(src+i);

break;   

  

default:

break;

}

if(flag){

odd= *(dest+i);

if(method==1) odd = odd & *(src+i);

if(method==0) odd = odd | *(src+i);

bitpattern(tmp,odd);

for(buf=tmp,j=0;j<flag;j++)

if(*buf=='1')

setbit(*(dest+i),j);

else

clrbit(*(dest+i),j);

}   

return 0;   

}