    #include <stdio.h>
    #include <stdint.h>

    uint32_t flip(uint32_t n)
    {
        if (n == 0) return 0;
   
        uint32_t mask = (uint32_t)~0 >> __builtin_clz(n);
        return n ^ mask;
    }

    int main()
    {
        printf("%#x\n", flip(0xaa55));
    }
