- 42
- 0
- 约16.63万字
- 约 128页
- 2016-10-15 发布于四川
- 举报
C语言竞赛题目全--重点--多看看题目类型!!!
C语言竞赛题目大全
POWERED BY SYD168 2010年5月7日
寄存器操作
问题:
假设在一个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进制输出)
Sample Input0,3
输出:
1234567c
解题思路:很简单的位操作,但是需要注意的是Y那里是 110,不能直接或上110,而是先两次SET,在CLR。#include stdio.h
#define CLR(r, x) r = ~(1UL x) //1UL 表示32位无符号数,将r的x位清零。
#define SET(r, y) r |= (1UL y) //表示将r的y位置零
int main()
{
int r, x, y;
scanf(%x,%d,%d, r, x, y);
CLR(r,x); //清除x位
SET(r,
原创力文档

文档评论(0)