快速给出一个数的二进制表达中末尾有多少个 0

 

下面这个位运算小技巧可以迅速给出一个数的二进制表达中末尾有多少个 0 。比如, 123 456 的二进制表达是 1 11100010 01000000 ,因此这个程序给出的结果就是 6 。

1 unsigned int v;  // find the number of trailing zeros in 32-bit v
2 int r;           // result goes here
3 static const int MultiplyDeBruijnBitPosition[32] =
4 {
5   0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8,
6   31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9
7 };
8 r = MultiplyDeBruijnBitPosition[((uint32_t)((v & -v) * 0x077CB531U)) >> 27];

详细内容可以去这里 http://graphics.stanford.edu/~seander/bithacks.html

也可以直接百度  德布莱英序列

posted @ 2019-12-23 10:51  huluBrother  阅读(945)  评论(0)    收藏  举报