一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 5971|回复: 20

给大家看一段程序非常精辟

[复制链接]
发表于 2014-5-26 11:39 | 显示全部楼层 |阅读模式
u8 gfReverse_Bits(u8 Data)
" O" _; B5 z$ [/ o2 j" c2 F$ v{* ~1 Y: W( j5 u& P6 [8 h
        Data=(Data<<4)|(Data>>4);  3 A( B) y4 P/ [$ b3 A
        Data=((Data<<2)&0xcc)|((Data>>2)&0x33);  , b& S; D0 P. b* f, `$ b
        Data=((Data<<1)&0xaa)|((Data>>1)&0x55);
% F8 {! v; a& d        return Data;
$ H' z. i- y9 e# l& ~6 l1 T}
' H: y/ |! x! ]0 D8 N
+ O1 i( S3 O# H, d2 A9 u) O7 o  z- ]: {7 s
如果大家看明白了发现这个十分的精巧可以为我所用,但之前大家是怎么做的呢(一个一个来求,是的我是这样做的)?
发表于 2014-5-26 11:53 | 显示全部楼层
虽然精辟,但是在实际开发中,非常不建议这样写,因为没办法快速的让别人读懂。
回复

使用道具 举报

发表于 2014-5-26 12:11 | 显示全部楼层
高地位反转?0 L5 j* b( E- X4 E. J8 ^: {0 q
他这样写根本就没效率,直接查表快得多。
回复

使用道具 举报

发表于 2014-5-26 12:18 | 显示全部楼层
这是基于分治思想的,在数据量大时很有优势,但这里才8位啊,优势不明显。且看C代码好像挺“精简”,但编译后就不知道会有多冗长了。
: ^& d1 j, S1 x6 q& T( j不过仍不失为一种编程学习过程的思维训练。
回复

使用道具 举报

 楼主| 发表于 2014-5-26 12:24 | 显示全部楼层
jckimi 发表于 2014-5-26 11:53
  s6 `/ n% m% F- C虽然精辟,但是在实际开发中,非常不建议这样写,因为没办法快速的让别人读懂。

. u& U$ \& Y- v( N是有点难我花了一个小时才知道它的原理,但从另外一个角度来看还是值的,知道多一点数据的转换还是值的。
2 n* L! _+ ?% L$ K
回复

使用道具 举报

 楼主| 发表于 2014-5-26 12:25 | 显示全部楼层
xwj 发表于 2014-5-26 12:11
4 S0 F2 r4 j1 }7 o9 q高地位反转?
9 Q/ A9 P" i- Q0 r6 R他这样写根本就没效率,直接查表快得多。
& _* d9 Q" [5 e5 v; v6 p
是的高低位反转,那请问查找表如何查呢?能发一段同样的效果的程序来学习一下吗?+ d% Z1 r( @# g0 x) t' h% I+ V0 u
回复

使用道具 举报

 楼主| 发表于 2014-5-26 12:28 | 显示全部楼层
reiyawea 发表于 2014-5-26 12:18
% `# n) q0 v: Q, E6 T1 H- s这是基于分治思想的,在数据量大时很有优势,但这里才8位啊,优势不明显。且看C代码好像挺“精简”,但编译 ...

5 Q  p2 E1 s4 B( h: ?4 r在C语言里优化对汇编是有帮助的。反正我不管是写VERILOG还是C都不想绕圈子。
1 _7 [0 z/ C3 {8 h. l2 B
回复

使用道具 举报

 楼主| 发表于 2014-5-26 12:33 | 显示全部楼层
其实说来这个程序好简单,当然不知道好像看天书。
& d+ g$ p! G" K0 ^- R它是分三个部分来处理的
3 ?( l% \! v9 M% d- Z0 T$ G1 R第一首先将高低4位对调9 A: A7 C4 H' b% `5 Q+ B0 r. Q" M
第二将4位中的两位对调. m) C( S' x4 H3 L5 ?9 U9 Y% e+ d
第三将2位对调
4 C2 N* O- o% ^# K- r所以会有 <<4 , >>4 , <<2, >>2 ,<<1,>>1.
回复

使用道具 举报

发表于 2014-5-26 15:39 | 显示全部楼层
非常好啊,钱些日子做了对掉,各种运算,取余 除 乘 用了个变。觉得这个再16位以上非常有意义
回复

使用道具 举报

 楼主| 发表于 2014-5-26 16:08 | 显示全部楼层
384065902 发表于 2014-5-26 15:39
2 Q: v% M5 H* G% G7 Y非常好啊,钱些日子做了对掉,各种运算,取余 除 乘 用了个变。觉得这个再16位以上非常有意义
7 R$ k* z0 C# G" _2 ^8 L  M/ D
你只要看懂这个程序16位32位都会写出来了。9 z5 P& f5 \( `/ W1 `, C0 ]
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2026-4-17 17:56 , Processed in 0.041185 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表