Code
#include <stdio.h>
unsigned char modifyBit(unsigned char reg, int pos, int mode) {
// Write your code here
if(mode)
reg = reg | (1<<pos);
else
reg = reg & ~(1<<pos);
//and you guys try with this single line logic
//reg = mode ? (reg | (1<<pos)) : (reg & ~(1<<pos));
return reg;
}
int main() {
unsigned char reg;
int pos, mode;
scanf("%hhu %d %d", ®, &pos, &mode);
printf("%d", modifyBit(reg, pos, mode));
return 0;
}
Solving Approach
unsigned char modifyBit(unsigned char reg, int pos, int mode) {
// Write your code here
if(mode)
reg = reg | (1<<pos);
else
reg = reg & ~(1<<pos);
return reg;
}
unsigned char modifyBit(unsigned char reg, int pos, int mode) {
// Write your code here
if(mode)
reg = reg | (1<<pos);
else
reg = reg & ~(1<<pos);
return reg;
}
Step 1.
if(mode)
reg = reg | (1<<pos);
if mode is true(1);
reg = reg | (1<<pos)
(1<<pos) 1 is left shifting to desired position. without effecting other bits.
Step 2.
else
reg = reg & ~(1<<pos);
~(1<<pos) in this step 1 left shifting to desired position. and complementing the result.
reg & ~(1<<pos). and (&) operation between reg and result of (~(1<<pos);
Step-3
and you guys try with this single line logic
reg = mode ? (reg | (1<<pos)) : (reg & ~(1<<pos));
Input
10 3 1
Expected Output
10