Only U is in my heart!
I will be right here waiting for you.

16位整形数据按位反转C语言源码

今天在调试AD的时候,出现一个问题,无论是时钟信号,输入信号,还是AD使能信号输入都正常,可是采集到的数据都是不正常的,与实际的有很大的偏差,百思不得其解。查看原理图的时候猛然想起,在布板的时候,为了走线方便,把AD输出跟XINTF输入的高地位给颠倒了顺序,也就是说现在直接采集下来的数据经行位反转后才是正常的数值。按位反转的C代码如下:

其实反转的算法很简单,简单的描述一下:第一行代码为奇偶位相互交换;第二行为以两位为一单元,奇偶单元进行交换;第三行为以四位为一单元,奇偶单元进行交换;第四行为以八位为一单元,奇偶单元进行交换。至此,16位反转完成,算法结束。

Uint16 bit_reverse(Uint16 x)
{
	x = ((x >> 1) & 0x5555) | ((x << 1) & 0xaaaa);
	x = ((x >> 2) & 0x3333) | ((x << 2) & 0xcccc);
	x = ((x >> 4) & 0x0f0f) | ((x << 4) & 0xf0f0);
	x = ((x >> 8) & 0x00ff) | ((x << 8) & 0xff00);
	return x;
}

此处是对16位的整形数据进行的按位反转。如果需要,在最后一句后面加上下面这句:

	x = ((x >> 16) & 0x0000ffff) | ((x << 16) & 0xffff0000);

也就是以十六位为一单元,奇偶单元进行交换。同时注意补全前面与移位后的数据按位与的值。

很简单的一处小细节,却让我伤透了脑筋。看来细节决定成败还真没错。不过带上这个小算法对系统的实时性稍有影响。等下次板子打样的时候得改过来。

赞(0) 打赏
未经允许不得转载:Onlyisu » 16位整形数据按位反转C语言源码

相关推荐

  • 暂无文章

评论 5

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

大前端WP主题 更专业 更方便

联系我们联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏