C语言实现高低位镜像用什么方法比较简单?

[复制链接]
9737|28
 楼主| icmap 发表于 2009-12-6 23:23 | 显示全部楼层 |阅读模式
这里说的高地位镜像的意思是指最高位变为最低位,例如,10001100b 变为 00110001b。
用汇编语言比较简单,带进位左移和右移并循环8次就行了。

但 C 语言没有带进位移位,该用什么方法比较简单?
查表法是一种快速的方法,但仅在程序空间充裕的时候适用。大家还有没有其它方法?
hotpower 发表于 2009-12-6 23:50 | 显示全部楼层
查表或反转移位。
 楼主| icmap 发表于 2009-12-7 00:02 | 显示全部楼层
左移和右移我知道,但不明白什么是反转移位。
xwj 发表于 2009-12-7 00:07 | 显示全部楼层
去搜索老hot的红杏出墙
sz_kd 发表于 2009-12-7 00:10 | 显示全部楼层
查表应该也不费空间,要不你可以与0X80相与后再做个循环依次计算每一位运算也不费空间
xwj 发表于 2009-12-7 00:18 | 显示全部楼层
查表是最快的,不过要占用256字节的表格空间(8位)
xwj 发表于 2009-12-7 00:19 | 显示全部楼层
查表是最快的,不过要占用256字节的表格空间(8位)
xwj 发表于 2009-12-7 00:39 | 显示全部楼层
唉,老x指点你去找最正确的打渔方法,你却懒得找,那就算了。。。
hotpower 发表于 2009-12-7 01:01 | 显示全部楼层

程序没错,很规范~~~

https://bbs.21ic.com/icview-147349-1-1.html

icmap网友能否提供链接???谢谢!!!
ZALIN 发表于 2009-12-7 03:50 | 显示全部楼层
除了使用查表,更通用的还是蝶型变换吧

// 反转字节
A = ((A & 0xaa) >> 1) | ((A & 0x55) << 1);
A = ((A & 0xcc) >> 2) | ((A & 0x33) << 2);
A = ((A & 0xf0) >> 4) | ((A & 0x0f) << 4);
hotpower 发表于 2009-12-7 06:51 | 显示全部楼层
dsp有反转汇编指令,mcu,arm之类好像没有
mohanwei 发表于 2009-12-7 08:20 | 显示全部楼层
查半字节,性能和速度都中庸……
zhiyonghe 发表于 2009-12-7 09:18 | 显示全部楼层
除了使用查表,更通用的还是蝶型变换吧

// 反转字节
A = ((A & 0xaa) >> 1) | ((A & 0x55) > 2) | ((A & 0x33) > 4) | ((A & 0x0f)
ZALIN 发表于 2009-12-7 03:50


这方法不错!!
kencool 发表于 2009-12-7 11:07 | 显示全部楼层
楼上给个链接呗
xlsbz 发表于 2009-12-7 12:04 | 显示全部楼层
  1. #define countof(c) sizeof(c) / (sizeof(*(c)))

  2. unsigned int i;
  3. unsigned int temp;
  4. unsigned int arr[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};


  5. for (i = 0; i < (countof(arr) / 2); i++) {
  6. temp = arr[i];
  7. arr[i] = arr[countof(arr)- i - 1];
  8. arr[countof(arr) - i - 1] = temp;
  9. }



  10. //如果有奇数个元素,那么countof(arr) / 2 取整。比如说有11个元素,那么countof(arr) / 2 的值为5.
xlsbz 发表于 2009-12-7 12:06 | 显示全部楼层
#define countof(c) sizeof(c) / (sizeof(*(c)))

unsigned int i;
unsigned int temp;
unsigned int arr[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};


for (i = 0; i < (countof(arr) / 2); i++) {
temp = arr;
arr = a ...
xlsbz 发表于 2009-12-7 12:04


这我写的,咋样?
xlsbz 发表于 2009-12-7 12:08 | 显示全部楼层
这我写的,咋样?
xlsbz 发表于 2009-12-7 12:06

哇哇...........

不对!!与楼主问的不是一条道上的!
因特网用户 发表于 2009-12-7 12:08 | 显示全部楼层
xlsbz 发表于 2009-12-7 12:13 | 显示全部楼层
唯一的选择 查表!
ayl439 发表于 2009-12-7 13:02 | 显示全部楼层
mark !~  记住蝶形变换了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

180

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部