位倒转

例如 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);
}

这个就简单多了,没有用乘除,只用累加即可。。。。。。。。

 

posted @ 2013-10-17 16:53  moon_cat  Views(172)  Comments(0Edit  收藏  举报