这个题目呢,首先需要确定数据类型,在这里我选择的数据类型是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;
}
程序执行结果如下所示: