在C / C ++中向左旋转

时间:2012-08-13 20:55:44

标签: c++ c bit-manipulation bits

  

可能重复:
  How to perform rotate shift in C
  Bitwise rotate left function

在C / C ++中,我分别为<<>>作为左撇子和右移。

为了测试这个算子的功能,我想找到一个数字n的第一个设置位,左移1,然后用第一个移位数|我之前发现的一点。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

long long int shiftleft(long long int number, unsigned n)    
{unsigned minusone=sizeof(long long int)*8-1;
 long long int r= number & (1LL<<minusone);//save the sign, which is the most significant bit
 long long int mask = (1LL<<minusone)-1;  //a mask to get all other bits

 return ( number<<n) | ((number & mask) >>(minusone-n)) | r; //rotate left in a loop only 63 bits 
}

尚未测试代码

答案 1 :(得分:0)

你可以像这样左转:

int n; // amount to rotate by
unsigned int d; // the positive number to rotate.
if(n < (CHAR_BIT * sizeof(int)))
    int x = (n << d)|(n >> ((CHAR_BIT * sizeof(int)) - d));

然而,这仅适用于正数。正确的旋转可以像这样完成:

if(n < (CHAR_BIT * sizeof(int)))
    int x = (n >> d)|(n << ((CHAR_BIT * sizeof(int)) - d));

这也适用于正数。