/* 编写函数: unsigned int reverse_bit(unsigned int value); 这个函数的返回值是value的二进制位模式从左到右翻转后的值。 如: 在32位机器上25这个值包含下列各位: 00000000000000000000000000011001 翻转后:(2550136832) 10011000000000000000000000000000 程序结果返回: 2550136832 */ #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <math.h> unsigned int resverse_bit1(unsigned int value) { unsigned int reverse_value=0; for (int i = 0; i < 32; i++) { reverse_value = reverse_value << 1;//保存上一位的结果 reverse_value |= ( ( value >> i ) & 1 );//每次把value右移,把value移位后的最低位取出来,并放入翻转后数值的最后一位 } return reverse_value; } unsigned int resverse_bit2(unsigned int value) { unsigned int reverse_value = 0; for (int i = 0; i < 32; i++) { reverse_value += ((value >> i) & 1) * pow(2, 31 - i); } return reverse_value; } int main() { unsigned int value; scanf("%u",&value); unsigned int reversevalue=resverse_bit1(value); unsigned int reversevalue2 = resverse_bit2(value); printf("%u\n",reversevalue); printf("%u\n", reversevalue2); system("pause"); return 0; } //unsigned int reverse_bit1(unsigned int n) //{ // int i = 0; // unsigned ret = 0; // for (i = 0; i < 32; i++) // { // //保存上一位结果 // ret <<= 1; // //把当前的数翻转结果保存在ret的第一位 // ret |= (n >> i) & 1; // } // return ret; //} //int main() //{ // unsigned int n = 0; // scanf("%u", &n); // printf("%u\n", reverse_bit1(n)); // system("pause"); // return 0; //}