站外题求调
  • 板块学术版
  • 楼主Ls_Lemilk
  • 当前回复0
  • 已保存回复2
  • 发布时间2023/12/30 19:03
  • 上次更新2023/12/30 21:15:18
查看原帖
站外题求调
761968
Ls_Lemilk楼主2023/12/30 19:03

题目描述:

所谓位运算,就是指在二进制下,按位进行与(&)、或(|)、非(~)、异或(^)、左移(<<)、右移(>>)的操作。 与(&)、或(|)、异或(^)运算需要两个运算数,按二进制位进行运算时,1当true,0为false进行运算,如:

5(101) & 7 (111) = 5 (101)。

左移1位,相当于乘2(因为所有的数在电脑中以二进制形式存储的),右移1位,相当于除2,如:x=1<<4; x的值为16。

位运算,速度快,同时使用与、或等运算,可以查看某个数在二进制下某一位的具体值,如:判断x在二进制下倒数第3位是不是为1,y=x & 1<<2,y>0则倒数第3位为1,否则为0。

现在给定一些位运算的表达式,求其值。

输入格式:

第1个数为1,后跟一个位运算表达式(只包含一个位运算符)。

第1个数为2,后跟两个数x,y,求x数在二进制下右起第y位是不是为1,是输出yes,否则输出no。

第1个数为3,后跟两个数x,y,求x数在二进制下把右起第y位置1,并输出x。

第1个数为4,后跟两个数x,y,求x数在二进制下把右起第y位置0,并输出x。

第1个数为5,后跟两个数x,y,求x数在二进制下把x左移y位。

第1个数为6,后跟一个数x,判断x是不是为2的n次方的数,若是输出yes,否则输出no。

输出格式:

一行,表示运算后的结果。

样例输入

样例1:
1 5&7
样例2:
2  15  3
样例3:
3  11  3
样例4:
5  10  4
样例5:
6  9

样例输出

样例1:
5
样例2:
yes
样例3:
15
样例4:
160
样例5:
no

My code(90pts)

#include<bits/stdc++.h>
using namespace std;
int n, a, b, ans; 
char c;
int main(){
	cin >> n;
	if( n == 1 ){
		cin >> a >> c;
		if(  c == '<' || c == '>' ) cin >> c;
		cin >> b; 
		switch( c ){
			case '&':
				printf( "%d", a&b );
				return 0;
			case '|':
				printf( "%d", a|b );
				return 0;
			case '^':
				printf( "%d", a ^ b );
				return 0;
			case '<':
				printf( "%d", a<<b );
			    return 0;
			case '>':
				printf( "%d", a>>b );
			    return 0;
		}
	} 
	if( n == 2 ){
		cin >> a >> b;
		ans=    a&(1<<(b-1))    ;
		if(   ans     ) cout << "yes";
		else cout << "no";
	}
	if( n == 3 ){
		cin >> a >> b;
		ans =   a&(1<<(b-1) )    ;
		if(    ans   ) cout << a;
		else{
			ans = 1<<(b-1);
		    cout << a + ans;
		}
	}
	if( n == 4 ){
		cin >> a >> b;
		ans= a&(1<<(b-1));
		if(!ans) cout<<a;
		else{
			ans=1<<(b-1);
		    cout <<  a - ans;
		}
	}
	if( n == 5 ){
		cin >> a >> b;
	    ans = a<<b;
	    cout << ans;
	}
	if( n==6 ){
		cin >> a;
		if(a&(a-1)==0) cout << "yes";
		else cout << "no";
	}
	return 0;
}
2023/12/30 19:03
加载中...