方法一:利用二進位制數轉化為十進位制數的計算規則來編寫,**如下:
#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...