博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 3748 位操作
阅读量:5086 次
发布时间:2019-06-13

本文共 1638 字,大约阅读时间需要 5 分钟。

位操作
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 8856   Accepted: 3535

Description

假设你工作在一个32位的机器上,你需要将某一个外设寄存器的第X位设置成0(最低位为第0位,最高位为第31位),将第Y位开始的连续三位设置成110(从高位到低位的顺序),而其他位保持不变。对给定的寄存器值R,及X,Y,编程计算更改后的寄存器值R。

Input

仅一行,包括R,X,Y,以逗号","分隔,R为16进制表示的32位整数,X,Y在0-31之间且Y>=3,(Y-X)的绝对值>=3,保证两次置位不会重合

Output

更改后的寄存器值R(16进制输出)

Sample Input

12345678,0,3

Sample Output

1234567c

Source

 

做法一:

C++标准库:bitset 用法整理  :

1 #include
2 #include
3 #include
4 #include
5 #include
//二进制类,bit位,初始为0 6 using namespace std; 7 int main(){ 8 int r,x,y; 9 while(scanf("%x,%d,%d",&r,&x,&y)==3){
//输入16进制数10 bitset<32> b(r);11 b.reset(x);12 b.set(y);13 b.set(y-1);14 b.reset(y-2);15 printf("%x\n",b.to_ulong());//将二进制转换为unsign long数值16 }17 return 0;18 }

 

 

做法二:

 模拟

1 #include
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 int bit[32]; 8 int main(){ 9 int r,x,y;10 while(scanf("%x,%d,%d",&r,&x,&y)==3){11 memset(bit,false,sizeof(bit));12 int i=0;13 for(;i<32;i++){14 bit[i]=r&1;15 r=r>>1; 16 }17 bit[x]=0;18 bit[y]=1;19 bit[y-1]=1;20 bit[y-2]=0;21 for(i=31;i>=0;i--){22 r=r<<1;23 r=r|bit[i];24 }25 printf("%x\n",r);26 }27 return 0;28 }

 

转载于:https://www.cnblogs.com/Deribs4/p/4299132.html

你可能感兴趣的文章
** exception error: no match of right hand side value
查看>>
[傅里叶变换及其应用学习笔记] 八. 时延性,尺度变化,卷积
查看>>
(leetcode题解)K-diff Pairs in an Array
查看>>
打开gvim发现菜单栏是乱码
查看>>
Vision Acquisition Software(NI-IMAQ), Vision Development Module
查看>>
饥荒猪镇物品 代码
查看>>
linq 俩表联合
查看>>
windows下编辑的shell复制到linux无法执行
查看>>
java 生成可执行jar包
查看>>
欧几里得和扩展欧几里得
查看>>
二、latex简单使用
查看>>
Docker 相关命令汇总
查看>>
spring mvc 下ajax请求返回值问题
查看>>
c++ --> 返回值分析
查看>>
SCADA-brick_Edit属性和方法
查看>>
iPhone LTE band
查看>>
ubuntu linux 修改ip 超扎心。
查看>>
mysql调优
查看>>
利用javascript 添加1万个div 效率优化
查看>>
管理就是要淘汰人渣,激活人员, 培养人手, 重用人才!
查看>>