翻转一个数字的位

本函数实现的是将一个value的二进制值从左到右变换一下后的值,例如把15的二进制 0000 0000 0000 0000 0000 0000 0000 1111 

变为 1111 0000 0000 0000 0000 0000 0000 0000    4026531840

 

 1 #include <stdio.h>
 2 
 3 unsigned int reverse_bits(unsigned int value)
 4 {
 5     unsigned int answer=0;
 6     unsigned int i;
 7     for(i=1;i!=0;i<<=1)//一个无符号int数在我的机器上左移32次后为0 与机器的整形字长无关
 8     {
 9         answer<<=1;
10         if(value&1) //判断value的最低位是否为1 
11         answer|=1;
12         value>>=1;
13         
14     }
15     return answer;
16  } 
17  
18  int main (void)
19  {
20      unsigned int a=15;
21      unsigned int j=reverse_bits(a);
22      printf("%u\n",j);
23      return 0;
24  }

 

posted @ 2018-01-09 14:08  快第三个十年  阅读(134)  评论(0编辑  收藏  举报