我们可以通过C,C ++中的位移算子(<>>)来访问移位的位吗? 例如: 23 GT;→1 我们可以访问最后一位移位(在这种情况下为1)吗?
答案 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
加快了操作。