位操作(JSU-ZJJ)
阿新 • • 發佈:2018-12-12
題目描述
假設你工作在一個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,保證兩次置位不會重合
處理到EOF為止
輸出
每組資料輸出更改後的暫存器值R(16進位制輸出)
樣例輸入
12345678,0,3
樣例輸出
1234567c
分析:
此題考察位操作,還有要對高位和低位的概念理解到位。
#include"stdio.h" #include"string.h" int main() { int R,X,Y; int a[32]; int s,i,k,j; int z,mark; char b[17]= {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; while(~scanf("%x,%d,%d",&R,&X,&Y)) { //printf("%d\n",R); memset(a,0,sizeof(a)); s=0; i=0; while(R!=0) { a[i++]=R%2; R=R/2; } a[X]=0; a[Y]=1; a[Y-1]=1; a[Y-2]=0; // for(j=0;j<i;j++) // printf("%d",a[j]); //printf("%lld\n",s); s=0; for(i=0; i<32; i++) { s=s+a[i]*pow(2,i); } printf("%x\n",s); } }