`
carolaif
  • 浏览: 70881 次
  • 性别: Icon_minigender_2
  • 来自: 大连
最近访客 更多访客>>
社区版块
存档分类
最新评论

C程序设计语言(第二版) 2-8 ☆

阅读更多

2-8  编写一个函数rightsort(x,n), 该函数返回将x循环右移n位后得到的值。

 

#include<stdio.h>

unsigned rightrot(unsigned x,unsigned n);

int main(){
	unsigned x=5;
	unsigned n=1;

	unsigned result;
	result = rightrot(x,n);
	printf("%d\n",result);
	return 0;
}

unsigned rightrot(unsigned x,unsigned n)
{ 
    while(n>0)
	{
		if((x&1)==1)
			x= (x>>1) | ~(~0U >> 1); 
		else
			x=x>>1;
		n--;
	}
	return x;
} 

 

下边这个函数也行,注意 ~(~0U >> 1)   与 ~0U << (size-1) 效果是一样的,学习size的用法

 

#include <limits.h> 
unsigned rightrot(unsigned x, unsigned n) 
{ 
	int size= sizeof(x) * CHAR_BIT;
    while (n > 0) { 
        if ((x & 1) == 1) 
            x = (x >> 1) | (~0U << (size-1)); 
        else 
          x = (x >> 1); 
        n--; 
    } 
    return x; 
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics