Invert 1 bit in C#

前端 未结 2 1546
你的背包
你的背包 2021-02-12 15:37

I have 1 bit in a byte (always in the lowest order position) that I\'d like to invert. ie given 00000001 I\'d like to get 00000000 and with 00000000 I\'d like 00000

相关标签:
2条回答
  • 2021-02-12 16:02

    How about:

    bit ^= 1;
    

    This simply XOR's the first bit with 1, which toggles it.

    If you want to flip bit #N, counting from 0 on the right towards 7 on the left (for a byte), you can use this expression:

    bit ^= (1 << N);
    

    This won't disturb any other bits, but if the value is only ever going to be 0 or 1 in decimal value (ie. all other bits are 0), then the following can be used as well:

    bit = 1 - bit;
    

    Again, if there is only going to be one bit set, you can use the same value for 1 as in the first to flip bit #N:

    bit = (1 << N) - bit;
    

    Of course, at that point you're not actually doing bit-manipulation in the same sense.

    The expression you have is fine as well, but again will manipulate the entire value.

    Also, if you had expressed a single bit as a bool value, you could do this:

    bit = !bit;
    

    Which toggles the value.


    More of a joke: Of course, the "enterprisey" way would be to use a lookup table:

    byte[] bitTranslations = new byte[256];
    bitTranslations[0] = 1;
    bitTranslations[1] = 0;
    
    bit = bitTranslations[bit];
    
    0 讨论(0)
  • 2021-02-12 16:10

    Your solution isn't correct because if bit == 2 (10) then your assignment will yield bit == 0 (00).

    This is what you want:

    bit ^= 1;
    
    0 讨论(0)
提交回复
热议问题