免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1268 | 回复: 2
打印 上一主题 下一主题

求助一道题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-12 09:22 |只看该作者 |倒序浏览
要求把一个32位unsigned int的所有位逆转,
即第1位和最后一位对调,以次类推。

我想到的办法是先把这个数mask一下只剩其中1位,然后把这位移位到对应的位置,
最后加到一个初始值为0的unsigned int,
32次循环可以完成

但是这样效率很低,有没有好一点的办法?

论坛徽章:
0
2 [报告]
发表于 2007-01-12 09:47 |只看该作者
可以只循环16次,每次交换第n位和31-n位。

论坛徽章:
0
3 [报告]
发表于 2007-01-12 10:54 |只看该作者

  1. #include <stdio.h>

  2. int main()
  3. {
  4.         unsigned int a = 1;
  5.         unsigned int b = 0;
  6.         unsigned int m,i;

  7.         a = 0x1464f2e2;
  8.         for (i = 0; i < sizeof(a)*8; i++)
  9.         {
  10.                 m = a & (0x0001 << i);

  11.                 if (i*2<sizeof(a)*8)
  12.                 {
  13.                         m = m <<(sizeof(a)*8 - i*2 -1);
  14.                 }
  15.                 else
  16.                 {
  17.                         m = m >>(i*2 - sizeof(a)*8 + 1);
  18.                 }

  19.                 b |= m;
  20.         }

  21.         printf("a=[%x], b=[%x]\n", a, b);
  22. }

复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP