循环移位,这个错在哪儿啊!

huochaofree 2012-03-20 08:07:28
#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;
}
}

...全文
69 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
漫步者、 2012-03-20
  • 打赏
  • 举报
回复

temp=value&1; //这个temp是干嘛的啊
//检查每位是1,还是0.
漫步者、 2012-03-20
  • 打赏
  • 举报
回复

temp=value&1; //这个temp是干嘛的啊
//是位与,看最右边的位是否为1.
//temp就是来检查每位是1,还是0.

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧