二進位制反轉

2021-09-23 18:31:45 字數 975 閱讀 8233

方法一:利用二進位制數轉化為十進位制數的計算規則來編寫,**如下:

#include#include#includeunsigned int reverse_bit(int num)

return sum;}

int main()

這裡的(num >> i) & 1意思是依次取這個數二進位制位模式下的最右面的那一位數,一共取32次。這樣就可以把二進位制位模式下的每一位數,都提取出來了。

方法二:利用十進位制數轉化為二進位制數的計算規則來編寫,**如下:

#define _crt_secure_no_warnings

#include #include int main()

printf("%u\n", sum);//%u 表示無符號10進製整數

return 0;

}

這裡利用n%sn得到每一次的餘數,也就是依次得到這個數二進位制位模式下從左到右的每一位數,並將它存放在tmp中,而這裡的 sum=sum*sn+tmp和第一種方法中的pow(2.0,31-i)有著異曲同工之妙。

方法三:利用位運算規則來編寫,**如下:

#include#include#includeunsigned int reverse_bit(int num)

return ret;

}int main()

這裡的 ret<<=1 的意思是,將ret向左移一位,而((num >> i) & 1)的意思是依次得到這個數二進位制位模式下最右面的那一位數,最後再 |ret,而 ret|((num >> i)&1)的意思是,每次得到這個數二進位制位模式下最右面的那一位數後,將這個數變成ret的最右面的那個數。

二進位制數反轉

1 使用了歸併排序的思路 最快 但是時間複雜度比歸併排序要小,每行 都相當於完成了一次歸併 include unsigned revbit unsigned x void main 2 把乙個32位整數按位反轉,即第1位轉到第32位,第2位轉到第31位,依次下去。一牛人寫的演算法如下 unsigne...

二進位制數反轉

1 使用了歸併排序的思路 最快 但是時間複雜度比歸併排序要小,每行 都相當於完成了一次歸併 include unsigned revbit unsigned x void main 2 把乙個32位整數按位反轉,即第1位轉到第32位,第2位轉到第31位,依次下去。一牛人寫的演算法如下 unsigne...

反轉二進位制數

reverse bits of a given 32 bits unsigned integer.for example,given input 43261596 represented in binary as 00000010100101000001111010011100 return 964...