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; }
相关文章推荐
- C语言实现比特位数组在目标空间左右居中对齐三种方式
- 稀疏举证指逆转矩阵(C语言实现)
- C语言实现链表逆转
- C语言实现字符串中的单词的逆转
- C语言非递归实现字符串逆转
- C语言实现双字节在数组中按比特位移动
- C语言实现单链表的逆转指定个数个元素
- 链表的c语言实现(二)
- 链表的c语言实现(六)
- 链表的c语言实现(三)
- lzw压缩算法的c语言实现
- c语言中时间陷阱的实现
- C语言实现MATLAB 6.5中M文件的方法
- DataStructure---LinkList 链表C语言实现代码
- 链表的c语言实现(四)
- 求{1,2,3,...m}的幂集之C语言实现
- C语言中的面向对象(2)-C语言的多态实现
- 链表的C语言实现(含动态内存分配)
- C语言实现MATLAB 6.5中M文件的方法
- 用C语言来实现hex文件到coe文件的转化[原创]