1

可能重复:
如何在 C
位向左旋转函数中执行旋转移位

在 C/C++ 中,我有<<>>作为左大便和右移。

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

我该怎么做?

4

2 回答 2

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 
}

没有测试过代码

于 2012-08-13T21:00:55.713 回答
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));

这也仅适用于正数。

于 2012-08-13T21:02:05.573 回答