位操作
假设你工作在一个32位的机器上,你需要将某一个外设寄存器的第X位设置成0(最低位为第0位,最高位为第31位),将第Y位开始的连续三位设置成110(从高位到低位的顺序),而其他位保持不变。对给定的寄存器值R,及X,Y,编程计算更改后的寄存器值R。
 
输入:
       仅一行,包括R,X,Y,以逗号”,”分隔,R为16进制表示的32位整数,X,Y在0-31之间且Y>=3,(Y-X)的绝对值>=3,以保证两次置位不会重合
 
输出:
       更改后的寄存器值R(16进制输出)
 
样例输入:
12345678, 0, 3
 
样例输出:
1234567c
 
考察重点:嵌入式系统编程中,对位的操作,常用于操作寄存器内容。
 
参考代码:
  1. #include <stdio.h>  
  2.   
  3. #define CLR(r, x)   &= ~(1UL << x)  
  4. #define SET(r, y)   |=  (1UL << y)  
  5.   
  6. int main()  
  7.  
  8.     int r, x, y;  
  9.     scanf("%x,%d,%d"&r, &x, &y);  
  10.   
  11.     CLR(r,x);  
  12.     SET(r,y);  
  13.     SET(r,y-1);  
  14.     CLR(r,y-2);  
  15.   
  16.     printf("%x"r);  
  17.     return 0;  
  18. }