锐捷网络常考的位运算符题

来源:互联网 发布:python微信开发框架 编辑:程序博客网 时间:2024/05/16 00:46

问题一:

编写一个函数setBits(x,p,n,y),该函数返回对x执行下列操作后的结果:将x值中的从第p位开始的n个(二进制)位设置为y中最右边n位的值,x的其余各位保持不变

unsigned int setBits(unsigned int x,int p,int n,unsigned int y){//首先先保存x的p+n维之后的值unsigned int lastx=~(~0<<(p-n+1))&n;printf("%d\n",lastx);//将x从p位开始的n位值移植至末尾unsigned int transx=x>>(p-n+1);printf("%d\n",transx);    //将末尾的连续n个字符置0unsigned int zerox=transx&(~0<<n);printf("%d\n",zerox);//获取y值末尾n位的值unsigned int lasty=~(~0<<n)&y;    printf("%d\n",lasty);zerox=zerox|lasty;printf("%d\n",zerox);//将置零后的操作数左移p-n+1位unsigned int zuozero=zerox<<(p-n+1);printf("%d\n",zuozero);unsigned int result=zuozero|lastx;    printf("%d\n",result);return result;}