#include "stdio.h" #include "stdlib.h" /*-------------------------------------------------------------- 位操作 假设你工作在一个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 ---------------------------------------------------------------*/ /*----------------------------------------------- 修改指定位置的二进制值,参数1是将要修改的数值, 参数2为修改的位置,参数3为修改值只能为0或1 -----------------------------------------------*/ void fun(int& destValue,int pos,int modifyValue){ if(modifyValue == 0){ destValue &= ~( 1 << pos); }else if(modifyValue == 1){ destValue |= (1 << pos); } } int main(){ int value,x,y; /*----------------------- 输入参数 -----------------------*/ printf("参数1:需要修改的数值(16进制),参数2:修改位置,参数3:修改值(0或1) 逗号隔开/n"); scanf("%x,%d,%d",&value,&x,&y); /*----------------------- 处理 -----------------------*/ fun(value,x,0); fun(value,y,1); fun(value,y-1,1); fun(value,y-2,0); /*----------------------- 输出结果 -----------------------*/ printf("结果:%x(16进制)/n",value); return 0; }