Search code examples
cbit

Clearing least significant bit


Question

How would I change the least significant bit to 0 without affecting the rest of the value, for example: 0xffffffff , for example in C or Python? I am not a mathematical genius, so for me it's a hassle to find out how to achieve this.

Solution

n = 0 // clear this bit
0xffffffff &= ~(1U << n) = 0xfffffffe

Solution

  • Try this to clear the least significant bit:

    int x = 0xffffffff;
    
    ...
    
    /* clear least significant bit */
    x &= ~1;
    

    To set the LSB

    int x = 0xffffffff;
    
    ...
    
    /* set least significant bit */
    x |= 1;
    

    To change the LSB

    int x = 0xffffffff;
    
    ...
    
    /* change least significant bit */
    x ^= 1;
    

    If you want to extent that to set / clear / change bit n, change the 1 to (1U<<n).