在C,C ++中通过位移操作符(<>>)移位的位

时间:2015-02-18 11:35:41

标签: c++ c

我们可以通过C,C ++中的位移算子(<>>)来访问移位的位吗? 例如: 23 GT;→1 我们可以访问最后一位移位(在这种情况下为1)吗?

4 个答案:

答案 0 :(得分:3)

不,换班操作员只在换班后给出值。您需要执行其他按位操作来提取移出值的位;例如:

unsigned all_lost  = value & ((1 << shift)-1);  // all bits to be removed by shift
unsigned last_lost = (value >> (shift-1)) & 1;  // last bit to be removed by shift
unsigned remaining = value >> shift;            // lose those bits

答案 1 :(得分:2)

使用23>>1,清除了位0x01 - 在位移后你无法检索它。

那就是说,没有什么能阻止你在转移之前检查

int  value   = 23;
bool bit1    = value & 0x01;
int  shifted = value >> 1;

答案 2 :(得分:0)

您可以在转移之前访问位,例如

value  = 23;          // start with some value
lsbits = value & 1;   // extract the LSB
value >>= 1;          // shift

答案 3 :(得分:0)

值得指出的是,在MSVC编译器中存在一个内在函数:_bittest

加快了操作。