将一个字(32 bit)按字节反转的方法

什么意思呢?就是将 ABCD 变成 DCBA。这里的ABCD代表字节。

这个方法是在嵌入式系统课程中学到的,效率很高,该方法只用了一个临时变量而且不使用循环语句。

方法如下:

1
2
3
4
5
6
7
unsigned long func(unsigned long v) {
unsigned long t;
t = v ^ ((v << 16) | (v >> 16));
t &= ~0xff0000;
v = (v << 24) | (v >> 8);
return v ^ (t >> 8);
}

第一步: t = v ^ ((v << 16) | (v >> 16)),得到

第二步:t &= ~0xff0000,得到

~0xff0000 的结果为f0ff(字节为单位),则有

​ 即

第三步:v = (v << 24) | (v >> 8)

得到v = D000 | 0ABC

第四步:v ^ (t >> 8)

t >>8得到

v ^ (t >> 8)得到

​ 最后

有关这方面的知识可以到这里了解,里面介绍了大量的位运算技巧

文章作者: Sshpark
文章链接: http://sshpark.com.cn/2019/01/10/将一个字-32-bit-按字节反转的方法/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Sshpark