C++ 位操作(清除n位)
翻阅Gayle Laakmann McDowell的《破解编码访谈》一书,在比特操作一章中,它提出了一个问题: 查找的值(假设数字由4位表示):C++ 位操作(清除n位),c++,c,bit-manipulation,C++,C,Bit Manipulation,翻阅Gayle Laakmann McDowell的《破解编码访谈》一书,在比特操作一章中,它提出了一个问题: 查找的值(假设数字由4位表示): 1011&(~0~0不是1,而是1111(或0xf)。~运算符是按位非运算符,而不是逻辑运算符(即!) 因此,当向左移动两位时,最后四位是1100。1100&1011实际上是1000,~0不等于1。0将默认为整数,not操作将反转所有位,而不仅仅是第一位。是按位的Compl>接线员 ~0的值应为4位的1111 1011 & (~0 <&l
1011&(~0~0
不是1,而是1111
(或0xf
)。~
运算符是按位非运算符,而不是逻辑运算符(即!
)
因此,当向左移动两位时,最后四位是1100
。1100&1011
实际上是1000
,~0
不等于1。0
将默认为整数,not操作将反转所有位,而不仅仅是第一位。
是按位的Compl>接线员
~0
的值应为4位的1111
1011 & (~0 << 2)
= 1011 & ( 1111 << 2)
= 1011 & 1100
= 1000
1011&(~01011&(~0“假设数字由4位表示”-->~0
=0xF
@icepack删除7f
已完成。经验教训:位!=八位字节。因此,如果问题被设为1011&(~0000@user85030是的。就像07:56
和7:56
表示同一时间。谢谢。我接受了你的答案。结合Matt的回答,“0将默认为整数,NOT操作将反转所有位,而不仅仅是第一位。”完全回答了我的问题。
1011 & (~0 << 2)
= 1011 & ( 1111 << 2)
= 1011 & 1100
= 1000
1011 & (~0 << 2)