循环移位,这个错在哪儿啊!
#include <iostream>
using namespace std;
void shift(int &value,int);
int main(){
int count;
cin>>count;
while(count--){
int n,m;
cin>>n>>m;
shift(m,n);
cout<<m<<endl;
}
return 0;
}
void shift(int &value,int n){
if(n==0) return;
int x=1<<(sizeof(int)*8-1); //把1 左移后面这么多位
int temp,i;
if(n>0){
n=n%(sizeof(int)*8);
for(i=0;i<n;i++){ //没有看懂
temp=value&1; //这个temp是干嘛的啊
value=value>>1;
if(temp) value=value|x;
}
}
else
{
n=-n%(sizeof(int)*8);
for(i=0;i<n;i++){
temp=value&x;
value=value<<1;
if(temp) value=value|x;
}
}
}
下面的这个shift 函数哪儿错了啊!
void shift(int &value, int n){
if(n==0) return;
if(n>0){
n=n%(sizeof(int)*8);
int temp=0,i=0;
temp=value<<(sizeof(int)*8-n);
i=value>>n;
value=temp|i;
}
else
{
int temp=0,i=0;
n=-n%(sizeof(int)*8);
temp=value<<n;
i=value>>(sizeof(int)*8-n);
value=temp|i;
}
}