將一個數的二進位制位模式從左到右翻轉並輸出
阿新 • • 發佈:2019-01-06
題意舉例如果這個數是25,它的二進位制為
0000 0000 0000 0000 0000 0000 0001 1001
翻轉後的二進位制序列是
1001 1000 0000 0000 0000 0000 0000 0000
它所表示的數是 2550136832
題意分析:
法一:
根據二進位制轉換為十進位制的方法;
通過位運算取出25的每一位二進位制數,取出第一位將這個數乘以2^31,第二個數乘以2^30,依次取出並計算出總和;
法二:
通過位運算直接將取出的第一位左移31位,第二位左移30位,當然在這過程中要設定一個變數以便進行移位運算,經過迴圈將每一位都進行左移,最後得出的數的十進位制就是25翻轉後的數。
程式碼如下:
法一:
#include<stdio.h> #include<math.h> #include<stdlib.h> typedef unsigned int unit; unit reserse_bit(unit value) { int i = 0; unit num = 0; for (i = 0; i < 32; i++) { num += ((value >> i) & 1)*pow(2, 31-i); } return num; } int main() { int value = 0; int num = 0; scanf("%d", &value); num = reserse_bit(value); printf("%u\n", num); system("pause"); return 0; }
法二:
#include<stdio.h> unsigned int reserse_bit(unsigned int value) { unsigned int ret = 0; int i = 0; while (i <32) { ret<<=1; ret |= (value>>i) &1; i++; } return ret; } int main() { int value = 0; int num = 0; scanf("%d", &value); num = reserse_bit(value); printf("%u\n", num); system("pause"); return 0; }