Setting a bit while keeping the other is an elementary bit masking operation.
Setting a bit is done with a bitwise OR between the initial register and a mask. The bits of the mask are defined as :
0
in the mask => keep the bit.1
in the mask => set the bit;Let's suppose that we want to set the 4 least significant bits of an 8 bits word. The mask is:
$$ mask = (0000~1111)_2 = (0F)_{16} $$
$$ \begin{array}[t]{r} b_7 & b_6 & b_5 & b_4 & \, & b_3 & b_2 & b_1 & b_0 & <= & initial \: word \\ + \quad 0 & 0 & 0 & 0 & \, & 1 & 1 & 1 & 1 & <= & mask \\ \hline b_7 & b_6 & b_5 & b_4 & \, & 1 & 1 & 1 & 1 & <= & result \end{array} $$
This principle is based on the following relations of Boolean algebra:
The mask in this example can be applied to the variable reg
with the following statement:
result = reg | 0x0F;
Complete the program below to set the least significant bit of the variable reg
to zero:
// | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 |
unsigned char reg = 0xA2;
printf("Before : ");
affBin(reg);
// Set the least significant bit
// COMPLETE HERE
// Display the result
printf("After : ");
affBin(reg);
Complete the program below to clear the 5 most significant bits of the variable reg
:
// | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 |
unsigned char reg = 0xA2;
printf("Before : ");
affBin(reg);
// Set the 5 most significant bits
// COMPLETE HERE
// Display the result
printf("After : ");
affBin(reg);
What operator should be used to set a bit?
When setting a bit with a bitwise OR and a mask, a bit set to 1 in the mask will...
When setting a bit with a bitwise OR and a mask, a bit set to 0 in the mask will...
What is reg
after these instructions?
reg = 0xAA;
reg |= 0x0F;