2022年5月15日 星期日

[190] Reverse Bits

說是不能拿1 往左邊shift 31 個位元!說會超過int ! 
但我明明就是unsigned int 啊到底在歡什麼><
總之一開始想的從最右邊開始一個一個往左邊檢查是不太實際的
一邊做一邊把input 依續往右shift ,這樣就可以一直 & 0x1 就好了!
不需要把0x1 一路往左邊移去and XD 
啊真是很久沒寫code 變的很笨啊
以下是貼別人的依樣畫葫蘆~
如果不喜歡31往下減就從1往上加其實也沒有不行!
但要記得最後要把剩下的不需要shift 的最後一個位數加上去
換言之其實for 回圈裡面就是只有做31次啦!
做到第32 次就會爆炸!這樣看起來我原本一開始的年久失修解法其實也沒有不行啊 XD 應該就看今天的input 值能不能被修改吧. 如果input 不能改, 那也只好去shift 1 囉!以上 & 以下XD
uint32_t reverseBits(uint32_t n) {
    unsigned int i,ret=0;
    for (i=31;i>0;i--)
    {
//printf("i %d, %d\n",i ,ret);
        ret = (ret + (n&1)) *2;
        n= n>>1;
    }
    ret = ret + (n&1);
    return ret;
}

沒有留言:

張貼留言