What is (x & 1) and (x >>= 1)?

后端 未结 5 1298
轮回少年
轮回少年 2020-12-23 02:09

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

5条回答
  •  夕颜
    夕颜 (楼主)
    2020-12-23 03:09

    In addition to the answer of "dasblinkenlight" I think an example could help. I will only use 8 bits for a better understanding.

    x & 1 produces a value that is either 1 or 0, depending on the least significant bit of x: if the last bit is 1, the result of x & 1 is 1; otherwise, it is 0. 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 >>= 1 means "set x to itself shifted by one bit to the right". The expression evaluates to the new value of x after 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.

提交回复
热议问题