位操作
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 用法整理  :

http://happyboy200032.blog.163.com/blog/static/46903113201291252033712/

 #include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<bitset>//二进制类,bit位,初始为0
using namespace std;
int main(){
int r,x,y;
while(scanf("%x,%d,%d",&r,&x,&y)==){//输入16进制数
bitset<> b(r);
b.reset(x);
b.set(y);
b.set(y-);
b.reset(y-);
printf("%x\n",b.to_ulong());//将二进制转换为unsign long数值
}
return ;
}

做法二:

模拟

 #include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<bitset>
using namespace std;
int bit[];
int main(){
int r,x,y;
while(scanf("%x,%d,%d",&r,&x,&y)==){
memset(bit,false,sizeof(bit));
int i=;
for(;i<;i++){
bit[i]=r&;
r=r>>;
}
bit[x]=;
bit[y]=;
bit[y-]=;
bit[y-]=;
for(i=;i>=;i--){
r=r<<;
r=r|bit[i];
}
printf("%x\n",r);
}
return ;
}

最新文章

  1. Atitit onvif 协议截图 getSnapshotUri&#160;使用java
  2. Maximo 7.5 集成方式 去掉主菜单
  3. webstorm2016.2 for mac 安装
  4. c#判断IP是否可以Ping通
  5. C++ const
  6. 69.Android之天气预报app
  7. Linux学习笔记(一)2015.4.13
  8. MySQL存储引擎概述
  9. 你需要知道的九大排序算法【Python实现】之选择排序
  10. JavaScript模式读书笔记 文章3章 文字和构造
  11. ( ̄▽ ̄&quot;) 没钱了
  12. 接口测试思路,jmeter,接口测试流程
  13. zabbix 网络模板自动发现端口时,过滤掉某些特定规则的端口,减少item的方法
  14. mysql在线修复主从同步
  15. gps 经纬度 转换实际距离
  16. bochs模拟器创建映像文件 、写入文件并启动
  17. jenkins使用笔记
  18. C#开发必会
  19. C语言开发的思考
  20. spring boot(十七)上传文件

热门文章

  1. Delphi 按Esc快捷键退出程序的简单方法
  2. Djangorestframework编写post接口
  3. 工作中的Buff加成-结构化思考力:自创独门武功 3-3-3原则
  4. 构建针对 iOS 和 Android 的原生扩展
  5. NOIP simulation
  6. RDLC报表的相关技巧二(主从报表)
  7. php-fpm 解析
  8. AtCoder Grand Contest 031题解
  9. 编译的 Ruby 2.3.0 缺少 openssl 支持的解决方法 (已解决)
  10. [Objective-C语言教程]函数(11)