如:
在32位机器上25这个值包含下列各位:
00000000000000000000000000011001
翻转后:(2550136832)
10011000000000000000000000000000
程序结果返回:
2550136832
思路:第1位逆转到了第32位->后整数的值为2^31(2的31次方)
第i位逆转到了第32-i位->后整数的值为2^(32-i)(2的(32-i)次方)*(n>>(i-1))&1
累加每一位逆转之后的值-->二进制模式从左到右翻转后的值则为程序结果返回值。
1 //二进制位模式从左到右翻转 2 #include<stdio.h> 3 #include<math.h> 4 #define _CRT_SECURE_NO_WARNINGS 5 6 unsigned int reverse_bit(unsigned int n) 7 { 8 unsigned int num = 0; 9 int i = 0; 10 for (i = 1;i <= 32;++i) 11 { 12 num += (n >> (i - 1) & 1) * pow(2, 32 - i); 13 } 14 return num; 15 } 16 17 int main() 18 { 19 //在32位机器上25这个值包含下列各位: 20 //00000000000000000000000000011001 21 //翻转后:(2550136832) 22 //10011000000000000000000000000000 23 //程序结果返回: 24 //2550136832 25 unsigned int n = 0; 26 scanf("%u",&n); 27 printf("%u\n", reverse_bit(n)); 28 29 return 0; 30 }
原文地址:https://www.cnblogs.com/cuckoo-/p/10363185.html
时间: 2024-10-08 18:10:55