位倒转
例如 0xFFFF0000 倒转 0x0000FFFF
开始的时候想到一个办法,是这样:
/* 32 位机器 */
static unsigned reverse (unsigned dat) { int i = 0,low,high; for (i = 0 ;i < 16; i++) { low = (dat & (1<<i))>>i ; high = (dat & (1<<(31-i)))>>(31-i) ; dat = (dat & ~((1<<i) | (1<<(31-i)))) | (high<<i) | (low << (31-i)); } }
后来发现,这个实在是中规中矩,想到另一个还行的办法;
static unsigned reverse_x (unsigned dat) { unsigned sum = 0; do { sum = (sum << 1) + (dat&0x01); dat >>= 1; }while (dat); }
这个就简单多了,没有用乘除,只用累加即可。。。。。。。。