将一个无符号整形32位数按位逆序解决方案
将一个无符号整形32位数按位逆序
我的方案如下,大家有啥好的方法,讨论讨论啊
------解决方案--------------------
我的方案如下,大家有啥好的方法,讨论讨论啊
- C/C++ code
#include<stdio.h> int main() { unsigned int n = 0xFF008881; unsigned int tmp; unsigned int maskl = 0x1; unsigned int maskh = 0x80000000; unsigned int rst = 0; int i,j; printf("n = %x\n",n); for(i = 0; i <= 15; i++) { tmp = n & maskl; maskl = maskl << 1; for(j = i + 1; j <= 31 - i; j++) { tmp = tmp << 1; } rst = tmp | rst; } for(i = 0; i <= 15; i++) { tmp = n & maskh; maskh = maskh >> 1; for(j = i + 1; j <= 31 - i; j++) { tmp = tmp >> 1; } rst = tmp | rst; } printf("%x\n",rst); return 0; }
------解决方案--------------------
- C/C++ code
翻转一个32位二进制数 unsigned int n; scanf("%u",&n); n = ((n >> 1) & 0x55555555) | ((n << 1) & 0xaaaaaaaa); n = ((n >> 2) & 0x33333333) | ((n << 2) & 0xcccccccc); n = ((n >> 4) & 0x0f0f0f0f) | ((n << 4) & 0xf0f0f0f0); n = ((n >> 8) & 0x00ff00ff) | ((n << 8) & 0xff00ff00); n = ((n >> 16) & 0x0000ffff) | ((n << 16) & 0xffff0000); printf("%u",n);