打印

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

[复制链接]
8401|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的红杏出墙

使用特权

评论回复
5
sz_kd| | 2009-12-7 00:10 | 只看该作者
查表应该也不费空间,要不你可以与0X80相与后再做个循环依次计算每一位运算也不费空间

使用特权

评论回复
6
xwj| | 2009-12-7 00:18 | 只看该作者
查表是最快的,不过要占用256字节的表格空间(8位)

使用特权

评论回复
7
xwj| | 2009-12-7 00:19 | 只看该作者
查表是最快的,不过要占用256字节的表格空间(8位)

使用特权

评论回复
8
xwj| | 2009-12-7 00:39 | 只看该作者
唉,老x指点你去找最正确的打渔方法,你却懒得找,那就算了。。。

使用特权

评论回复
9
hotpower| | 2009-12-7 01:01 | 只看该作者

程序没错,很规范~~~

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

icmap网友能否提供链接???谢谢!!!

使用特权

评论回复
10
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);

使用特权

评论回复
11
hotpower| | 2009-12-7 06:51 | 只看该作者
dsp有反转汇编指令,mcu,arm之类好像没有

使用特权

评论回复
12
mohanwei| | 2009-12-7 08:20 | 只看该作者
查半字节,性能和速度都中庸……

使用特权

评论回复
13
zhiyonghe| | 2009-12-7 09:18 | 只看该作者
除了使用查表,更通用的还是蝶型变换吧

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


这方法不错!!

使用特权

评论回复
14
kencool| | 2009-12-7 11:07 | 只看该作者
楼上给个链接呗

使用特权

评论回复
15
xlsbz| | 2009-12-7 12:04 | 只看该作者
#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[i];
arr[i] = arr[countof(arr)- i - 1];
arr[countof(arr) - i - 1] = temp;
}



//如果有奇数个元素,那么countof(arr) / 2 取整。比如说有11个元素,那么countof(arr) / 2 的值为5.

使用特权

评论回复
16
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


这我写的,咋样?

使用特权

评论回复
17
xlsbz| | 2009-12-7 12:08 | 只看该作者
这我写的,咋样?
xlsbz 发表于 2009-12-7 12:06

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

不对!!与楼主问的不是一条道上的!

使用特权

评论回复
18
因特网用户| | 2009-12-7 12:08 | 只看该作者
mark

使用特权

评论回复
19
xlsbz| | 2009-12-7 12:13 | 只看该作者
唯一的选择 查表!

使用特权

评论回复
20
ayl439| | 2009-12-7 13:02 | 只看该作者
mark !~  记住蝶形变换了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

180

帖子

0

粉丝