Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 按位移位和十六进制值的ANDing之间的差异_C_Bit Manipulation_Bit Shift_Bitwise And - Fatal编程技术网

C 按位移位和十六进制值的ANDing之间的差异

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

如果我想将一个值的第2位设置为
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捕捉良好。已编辑。