您的位置:首页 > 编程语言 > C语言/C++

c语言实现比特位的逆转

2017-03-20 22:13 134 查看
// bactbits.cpp : Defines the entry point for the console application.
//
//c语言实现比特位反转
#include "stdafx.h"
#include<stdio.h>

int bit_reverse(int w, int bits);
int bit_reverse_2(int v, int bits);

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;
}

/*=========
方法二
=========
*/
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;
}

/*
=======
方法三
=======
*/
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: