可能重复:
How to perform rotate shift in C
Bitwise rotate left function
在C / C ++中,我分别为<<
和>>
作为左撇子和右移。
为了测试这个算子的功能,我想找到一个数字n
的第一个设置位,左移1,然后用第一个移位数|
我之前发现的一点。
我该怎么做?
答案 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));
这也适用于正数。