精选问答
一道c++编程的题目题目描述某系统定义的位操作命令由三部分构成:操作指令p 无符号整数x 参数m其中,x为32位无符号整数;m根据指令的不同可以代表参数n或者参数k(n, k为整数且 1≤n≤32,0≤k≤31);p则有L, C, S, R, B, G, Z, A, E九种取值可能。根据操作指令p,可以进行以下操作:输入:输出L x n:求x二进制值的低n位,并以十进制整数形式输出(如:L 30 3命令中,x=30,其二进制表示为11110,取低3位(最右边3位)得到110,以十进制整数形式输出为6)C

2020-04-29

一道c++编程的题目
题目描述
某系统定义的位操作命令由三部分构成:
操作指令p 无符号整数x 参数m
其中,x为32位无符号整数;m根据指令的不同可以代表参数n或者参数k(n, k为整数且 1≤n≤32,0≤k≤31);
p则有L, C, S, R, B, G, Z, A, E九种取值可能。根据操作指令p,可以进行以下操作:
输入:输出
L x n:求x二进制值的低n位,并以十进制整数形式输出(如:L 30 3命令中,x=30,其二进制表示为11110,
取低3位(最右边3位)得到110,以十进制整数形式输出为6)
C x n:将x二进制值的低n位置0,并以十进制整数形式输出(如:C 30 3将11110的低3位置0,得到11000,输出24)
S x n:将x二进制值的低n位置1,并以十进制整数形式输出
R x n:将x二进制值的低n位求反,并以十进制整数形式输出
B x n:将x二进制值的低n位保持,其它位求反,并以十进制整数形式输出
G x k:取x二进制值中第k位的值(最右为第0位,如:G 21 3将10101的第3位取出,得到0)
Z x k:将x二进制值中第k位清0(最右为第0位)
A x k:将x二进制值中第k位置1(最右为第0位)
E x k:将x二进制值中第k位求反(最右为第0位)
输入描述
输入包含若干行,每行由p, x, m组成,p为一个字符,代表操作指令代码,
x为32位无符号整数,m为整数,代表相应操作指令中的n或者k(n, k为整数且 1≤n≤32,0≤k≤31)。
输出描述
按照操作指令要求每行输出一个整数,每个整数对应一行输入。
输入样例
A 4365 20
Z 4357876 10
R 876435 8
L 8769 5
G 56732 8
S 987632 15
输出样例
1052941
4356852
876396
1
1
1015807
优质解答
//#include "stdafx.h"//vc++6.0加上这一行.
#include
using namespace std;
typedef struct abc{
char p;
unsigned x;
int n;
abc *next;
}*NODE,node;
void freenode(NODE p){
if(p->next) freenode(p->next);
else delete p;
}
NODE CreateLink(void){
char ch;
NODE head,p;
if((p=head=new node)==NULL){
cout << "Establish a head node failure...";
return NULL;
}
cout << "Enter commands & data('#' end)...";
while(1){
cin >> ch;
if(ch=='#') break;
if((p->next=new node)==NULL){
cout << "Failed to create node...";
freenode(head);
return NULL;
}
p->next->p=ch;
cin >> p->next->x >> p->next->n;
p=p->next;
}
p->next=NULL;
p=head;
head=head->next;
delete p;
return head;
}
void Processing(NODE p){
for(;p;p=p->next){
switch(p->p){
case 'L':
cout << (p->x & ((1<n)-1)) << endl;
break;
case 'C':
cout << (p->x & (~((1<n)-1))) << endl;
break;
case 'S':
cout << (p->x | ((1<n)-1)) << endl;
break;
case 'R':
cout << (p->x ^ ((1<n)-1)) << endl;
break;
case 'B':
cout << (p->x ^ (~(1<n)-1)) << endl;
break;
case 'G':
cout << ((p->x & (1<n)) || 0) << endl;
break;
case 'Z':
cout << (p->x & (~(1<n))) << endl;
break;
case 'A':
cout << (p->x | (1<n)) << endl;
break;
case 'E':
cout << (p->x ^ (1<n)) << endl;
break;
default:
cout << "Error...";
break;
}
}
}
void main(void){
NODE p;
Processing(p=CreateLink());
freenode(p);
}
//#include "stdafx.h"//vc++6.0加上这一行.
#include
using namespace std;
typedef struct abc{
char p;
unsigned x;
int n;
abc *next;
}*NODE,node;
void freenode(NODE p){
if(p->next) freenode(p->next);
else delete p;
}
NODE CreateLink(void){
char ch;
NODE head,p;
if((p=head=new node)==NULL){
cout << "Establish a head node failure...";
return NULL;
}
cout << "Enter commands & data('#' end)...";
while(1){
cin >> ch;
if(ch=='#') break;
if((p->next=new node)==NULL){
cout << "Failed to create node...";
freenode(head);
return NULL;
}
p->next->p=ch;
cin >> p->next->x >> p->next->n;
p=p->next;
}
p->next=NULL;
p=head;
head=head->next;
delete p;
return head;
}
void Processing(NODE p){
for(;p;p=p->next){
switch(p->p){
case 'L':
cout << (p->x & ((1<n)-1)) << endl;
break;
case 'C':
cout << (p->x & (~((1<n)-1))) << endl;
break;
case 'S':
cout << (p->x | ((1<n)-1)) << endl;
break;
case 'R':
cout << (p->x ^ ((1<n)-1)) << endl;
break;
case 'B':
cout << (p->x ^ (~(1<n)-1)) << endl;
break;
case 'G':
cout << ((p->x & (1<n)) || 0) << endl;
break;
case 'Z':
cout << (p->x & (~(1<n))) << endl;
break;
case 'A':
cout << (p->x | (1<n)) << endl;
break;
case 'E':
cout << (p->x ^ (1<n)) << endl;
break;
default:
cout << "Error...";
break;
}
}
}
void main(void){
NODE p;
Processing(p=CreateLink());
freenode(p);
}
相关问答