C 按位移位和十六进制值的ANDing之间的差异
如果我想将一个值的第2位设置为C 按位移位和十六进制值的ANDing之间的差异,c,bit-manipulation,bit-shift,bitwise-and,C,Bit Manipulation,Bit Shift,Bitwise And,如果我想将一个值的第2位设置为0,以下两个值之间的区别是什么: value = value & (1<<2); value = value & 0x2; value=value&(1正式答案 严格地说,如果您使用的是第一种形式value=value&(1使用按位AND时,清除掩码中未设置的所有位。因此,实际上只保留一位。如果只想清除一位,则将除所需位之外的所有位设置为1。您可以使用~运算符反转掩码中的所有位,如下所示: value = value & ~(1
0
,以下两个值之间的区别是什么:
value = value & (1<<2);
value = value & 0x2;
value=value&(1正式答案
严格地说,如果您使用的是第一种形式value=value&(1使用按位AND时,清除掩码中未设置的所有位。因此,实际上只保留一位。如果只想清除一位,则将除所需位之外的所有位设置为1。您可以使用~
运算符反转掩码中的所有位,如下所示:
value = value & ~(1<<2);
value = value & ~(0x2);
value=value&~(1区别在于它们设置了不同的位。(1啊,我想我明白了。你是如何对你的位进行编号的?也就是说,第一位是0还是1?问题中的代码使用的是0x2
,而不是4
@melpomene是的,其他人已经指出了这一点。我想解决的是关于带移位的常量表达式和常量表达式之间的区别的实际问题。问题说“设置为0
”,而不仅仅是“设置”。@melpomene捕捉良好。已编辑。