1
来源:互联网 发布:苹果mac电脑使用教程 编辑:程序博客网 时间:2024/05/18 02:51
问题:
假设在一个32位的机器上,需要将某个外设寄存器的第X位(最低位为第0位,最高位为第31位)设置成0,将第Y位开始的连续三位设置成110(从高位到低位的顺序),而其它位保持不变。对给定的寄存器值R,及X,Y,编程计算更改后的寄存器值R。
输入的数据仅一行,包括R,X,Y,以逗号","分隔,R为16进制表示的32位整数,X,Y在0-31之间且Y>=3,(Y-X)的绝对值>=3,保证两次置位不会重合更改后的寄存器值R(16进制输出)。例如:
n Sample Input
12345678,0,3
输出:
1234567c
代码:
#include <stdio.h>#include <stdlib.h>void f(int r, int x, int y);int main(int argc, char *argv[]){// f(0x12345678, 0, 3); int r; int x, y; scanf("%x%d%d", &r, &x, &y); f(r, x, y); return 0;}void f(int r, int x, int y){ if (x >31 || x < 0) return ; //将r的x位设置为0,其余不变 unsigned int op = 0xFFFFFFFE; for (short i = 0; i != x; ++i) { op = (op << 1); op = op | 0x00000001; } //得到了一个第x位为0的掩码 r = r & op; //将r的y位左起3位(从高到低)设置为110 op = 0xFFFFFFFE; for (int i = 0; i != y; ++i) { op = (op << 1); op = op | 0x00000001; } r = r & op; op = 0x00000003; for (int i = 0; i != y-1; ++i) { op = (op << 1); } //得到了第y、y+1位为11,其余全0的掩码 r = r | op; printf("%x\n", r);}
- 1
- 1
- 1
- 1
- 1
- 1
- 1》
- 1
- 1
- 1
- 1
- (1)
- 1
- 1
- 1
- 1
- 1
- 1
- 今天的但我发现了幸福的超级玛丽,白萝卜的种子
- mysql 存储过程
- struts 动态调用方法注意事项
- pb9.0 5507升级8836过程中出现的问题以及升级后工程运行没有反映的解决方法。
- 中望龙腾笔试题:寻找一张图最大的水域
- 1
- 数据库的备份
- shell中括号使用总结
- 面向对象设计原则
- 面向对象开发过程简介
- 通过Intent的Component属性来启动另一个Activity
- Spring攻略笔记-4 扫描组件
- Sql Server判断数据库、表、存储过程、函数是否存在
- 本文介绍使用OpenCV-Python进行形态学处理