C語言編程 輸出一個數二進制位模式從左到右翻轉後的值
阿新 • • 發佈:2019-04-21
依次 二進制 ret 序列 include stdio.h main signed std eg:
在32位機器上25這個值包含下列各位:
00000000000000000000000000011001
翻轉後:(2550136832)
10011000000000000000000000000000
程序結果返回:
2550136832
在32位機器上25這個值包含下列各位:
00000000000000000000000000011001
翻轉後:(2550136832)
10011000000000000000000000000000
程序結果返回:
2550136832
代碼核心思想是將原來二進制序列最後一位看作反轉後第一位,將原來二進制序列第一位看作反轉後最後一位進行重新計算
比如15的2進制為 ……0000 1111
計算方法為
12^1 + 12^2 + 12^3 + 12^4
反轉後為1111 0000……
計算方法為
12^31+12^30+12^29+12^28
源代碼:
#include<stdio.h> #include<stdlib.h> #include<math.h> unsigned int reverse_bit(unsigned int value) { int i=0,sum=0; for (i = 0; i < 32;i++) { sum+=((value>> i) &1) * (int)pow(2, 31 - i);//反轉後依次每位二進制序列重新計算 } return sum; } int main() { int n = 25,result; result=reverse_bit(n); printf("%u", result); system("pause"); return 0; }
C語言編程 輸出一個數二進制位模式從左到右翻轉後的值