c语言实现比特位反转

c语言实现比特位反转


1
2
3
#include "stdafx.h"  

#include<stdio.h>


1
2
3
int bit_reverse(int w, int bits);  

int bit_reverse_2(int v, int bits);


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main(int argc, char* argv[])  

{

int b = 2;

int bits = sizeof(int)*8;

printf("%d\n",bit_reverse(b, bits));

printf("%d\n",bit_reverse_2(b, bits));

getchar();

return 0;

}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/*========= 

方法二

=========

*/

int bit_reverse_2(int v, int bits)

{

int r = v; //保存反转后的结果

int s = bits-1;// 剩余需要移位的比特位

for (v >>= 1; v; v >>= 1)

{

/*

*通过循环对v进行逻辑右移,每右移一位,通过v & 1取v的最低位,

*加到r的最低位,r左移

*最后对v的最高位进行判断,若原来v的最高位为0,则此时s=1,则再将v左移一位,

*若v的最高位为1,则s=0,则不进行任何操作。

*/

r <<= 1;

r |= v & 1;

s--;

}

r <<= s; // 当v的最高位为0的时候进行移位

return r;

}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/* 

=======

方法三

=======

*/

int bit_reverse(int w, int bits)

{

int r = 0;

for (int i=0; i<bits; i++)

{

/*

* w & (1<<i) 作用是取出 w中的第i位(低位算起的)

* w & (1<<i) >> i 将上一步取出的数值放置到最低位(最右边)

* bit << (bits-i-1); 将上面每个所取的数值从最低位对称过去高位

* r |= bit << (bits-i-1); 用或操作存下对调过来的数值

*/

int bit = (w & (1 << i)) >>i;

r |= bit << (bits-i-1);

}

return r;

}

-------------本文结束感谢您的阅读-------------