这个题目呢,首先需要确定数据类型,在这里我选择的数据类型是unsigned类型,具体实现方法很简单,先得到unsigned类型数据的长度len,然后将x的后n位提取出来,左移len-n位得到end,然后将x右移三位得到top,最后将end和top进行或运算即可。为了方便显示结果,在这里我增加了一个显示将十进制数进行二进制显示的一个函数dtob()。
通过程序可知unsigned类型数据为32位。
#include<stdio.h> #include <stdlib.h> void dtob(unsigned int);//将十进制数换成二进制数示出 unsigned int rightrot(unsigned x,int n); int len();//用于获得unsigned类型数据的长度 int main() { unsigned int x=15; int n=2; dtob(x); x=rightrot(x,n); dtob(x); return 0; } unsigned int rightrot(unsigned x,int n){ int length=len(); unsigned end,top; end=x>>n; top=(x&(~(~0<<n)))<<(length-n); return end|top; } void dtob(unsigned int ten) { int two[100]; unsigned int shang = ten; int yu; int i = 0; while (shang != 0) { yu = shang % 2; shang = shang / 2; two[i++] = yu; } for (int j = i - 1; j >= 0; --j) { printf("%d", two[j]); } printf("\n"); } int len(){ unsigned i=1; int len=0; while(i!=0){ ++len; i=i<<1; } return len; }程序执行结果如下所示:
