为什么我必须在清除一点时使用〜运算符?

这个问题在这里已经有了答案:

  • 你如何设置,清除和切换一个位? 26个答案

  • 如果你想在右侧排第三位:

    Y :            01001000
    1 << 2 :       00000100
    Y | (1 << 2) : 01001100 The | is OR, bits are set to 1 if any is 1.
    

    如果你想删除该位:

    1 << 2 :         00000100
    ~(1 << 2) :      11111011  The ~ is NOT, bits are inversed
    Y :              01001100
    Y & ~(1 << 2) :  01001000 The & is AND, bits are set to 1 if both are 1.
    

    我建议你阅读更多关于按位运算符的信息


    不, ~无关与解释数为负:波浪~运营商解释号位的模式,它然后反转(即那些和用零替换原有零)。 实际上,如果将~应用于无符号值,结果将保持为正值。

    回想一下, 1 << k表达式在由k指定的位置产生一个全零和一个1的模式。 这是一个位掩码,可用于通过应用OR操作强制位k在位1

    现在考虑一下当你应用~时会发生什么:所有的0秒将变为1秒,唯一的1将变成零。 因此,结果是一个适用于通过应用AND操作强制单个位为零的位掩码。


    ~运算符将所有0都变为1,将所有1都变为0。 为了清除你想要的位置n中的bint,它将在第n个位置中全部为1,并且将其移到第n个位置,以便将一个位移到第n个位置,并且~反转所有位。

    链接地址: http://www.djcxy.com/p/28813.html

    上一篇: Why must I use the ~ operator when clearing a bit?

    下一篇: C++ Remove first Bit