交换一个无符号整形数的奇偶位
2012-09-24 21:14
183 查看
void OddEventBitSwap1(unsigned &A) { unsigned int mask = 0x3; int loop = sizeof(unsigned)*8/2; for(int idx = 0; idx < loop; idx++) { if (((A & mask) != mask) && ((A & mask) != 0)) { A = A^mask; } mask = mask << 2; } } void BitSwap(unsigned &A, int pos1, int pos2) { unsigned p1Value = ((0x1<<pos1)&A)>>pos1; unsigned p2Value = ((0x1<<pos2)&A)>>pos2; A = A & (~((0x1<<pos1 | 0x1<<pos2))); A = A | (p1Value<<pos2); A = A | (p2Value<<pos1); } void OddEventBitSwap2(unsigned int &A) { int loop = sizeof(unsigned)*8/2; int even = 0; int odd = 1; for (int idx = 0; idx < loop; idx++) { BitSwap(A, odd, even); odd += 2; even += 2; } } void OddEventBitSwap3(unsigned int &A) { unsigned int oddValue = A & 0X55555555; unsigned int evenValue = A & 0XAAAAAAAA; A = (oddValue<<1 | evenValue>>1); }
相关文章推荐
- 【C语言】用宏实现一个整形奇偶位交换
- 定义一个宏实现整形数字奇偶位交换(二进制位)
- 1. 给定两个整形变量的值,将两个值的内容进行交换。 2. 不允许创建临时变量,交换两个数的内容(附加题) 3. 求10 个整数中最大值。 4. 写一个函数返回参数二进制中 1 的个数
- 73 [面试题]交换一个整数的二进制表示的奇偶位(swapOddEvenBits)
- 用无符号的整形来表示一个IP地址
- 将ip地址压缩到一个无符号整形中
- C++实现堆排序并记录编程中遇到的一个bug(不要对无符号整形数在--的循环中采用>=0作为结束条件)
- 求一个字节(8bit)的无符号整形变量,其二进制中1的个数。
- 【C语言】接受一个整形(无符号),把他转换为字符并打印(递归)
- C语言中怎样判断一个整形数是有符号数还是无符号数
- 接受一个整形值(无符号),把它转换为字符并打印它
- C语言 将一个整形数字二进制位进行奇偶交换
- 对于一个字节(8bit)的无符号整形变量,求二进制表示中“1”的个数,要求算法执行效率尽可能地高
- 1. 给定两个整形变量的值,将两个值的内容进行交换。 2. 不允许创建临时变量,交换两个数的内容(附加题) 3. 求10 个整数中最大值。 4. 写一个函数返回参数二进制中 1 的个数
- The Super Powers UVA 11752 分析分析 求无符号长整形以内的数满足至少可以用两种不同的次方来表示。比如64 = 2^6 = 8^2; 一个数的1次方不算数。
- 用无符号的整形来表示一个IP地址
- 求一个无符号整形变量1的个数
- 一个字节(8bit)的无符号整形变量,求二进制表示中“1”的个数。
- 用宏写一个函数交换一个数的奇偶位 并简析宏与函数调用
- 打造一个专业符号菜单条