向左移动一个槽最左边的1位整数,而其他1位保持不变?

时间:2015-10-08 19:32:16

标签: bit-manipulation

例如:000010011将变为000100011

2 个答案:

答案 0 :(得分:0)

这个(伪代码)怎么样:

x=Your Bit
y=10000000

While((x&y)==0)
{
    y=>>1
}
x+y

仅当您的位不为0时才有效

答案 1 :(得分:0)

C ++,假设有符号int,O(n),其中n由最左边位的位置决定' 1'

#include <climits> // INT_MIN
int moveLeftmostLeft(int n)
{
  if(n==0) return 0;
  int flag = INT_MIN; // 1000 0000 ... 0000
  while((flag&n)==0)
    flag=(unsigned)flag>>1;
  return n+flag;
}