I am trying to do assignment: \"Find the number of bits in an unsigned integer data type without using the sizeof() function.\"
And my design is to convert the integ
In addition to the answer of "dasblinkenlight" I think an example could help. I will only use 8 bits for a better understanding.
x & 1produces a value that is either1or0, depending on the least significant bit ofx: if the last bit is1, the result ofx & 1is1; otherwise, it is0. This is a bitwise AND operation.
This is because 1 will be represented in bits as 00000001. Only the last bit is set to 1. Let's assume x is 185 which will be represented in bits as 10111001. If you apply a bitwise AND operation on x with 1 this will be the result:
00000001
10111001
--------
00000001
The first seven bits of the operation result will be 0 after the operation and will carry no information in this case (see Logical AND operation). Because whatever the first seven bits of the operand x were before, after the operation they will be 0. But the last bit of the operand 1 is 1 and it will reveal if the last bit of operand x was 0 or 1. So in this example the result of the bitwise AND operation will be 1 because our last bit of x is 1. If the last bit would have been 0, then the result would have been also 0, indicating that the last bit of operand x is 0:
00000001
10111000
--------
00000000
x >>= 1means "setxto itself shifted by one bit to the right". The expression evaluates to the new value ofxafter the shift
Let's pick the example from above. For x >>= 1 this would be:
10111001
--------
01011100
And for left shift x <<= 1 it would be:
10111001
--------
01110010
Please pay attention to the note of user "dasblinkenlight" in regard to shifts.