0
点赞
收藏
分享

微信扫一扫

华师复试 B 位运算

Mezereon 2022-03-30 阅读 35
c++算法

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;

int main(){
	int num,x,y,res=0,flag=0;
	cin>>num>>x>>y;
	vector<int>b;
	if(num<0) {
		flag=1;
		num=abs(num);
	}
	while(num!=0){
		b.push_back(num%2);
		num/=2;
	}
	if(flag){              		//如果是负数
		int diff=64-b.size();
		for(int i=0;i<diff;++i)        //高位补0
			b.push_back(0);	 
		for(int i=0;i<b.size();++i){   //求补码
			if(b[i]==1){   //第一次出现1则开始取反
				for(int j=i+1;j<b.size();++j){
					if(b[j]==0)b[j]=1;
					else b[j]=0;
				}
				break;             
			}
		}
	}
	swap(b[x],b[y]);  
	int p=1;
	for(int i=0;i<b.size();++i){
		res+=b[i]*p;
		p=2*p;
	}
	cout<<res;
	system("pause");
	return 0;
}
举报

相关推荐

0 条评论