编写函数:unsigned int reverse

    xiaoxiao2025-07-29  14

    问题描述:

    编写函数:  unsigned int reverse_bit(unsigned int value);  这个函数的返回值是value的二进制位模式从左到右翻转后的值。  如:  在32位机器上25这个值包含下列各位:  00000000000000000000000000011001  翻转后:(2550136832)  10011000000000000000000000000000  程序结果返回:  2550136832 

    问题分析:

    方法一:

    1、输入一个数,并传值给reverse_bit(unsigned int value); 

    2、定义一个数组,对传进来的数通过对 2 取模方式求得每一位,并存入数组;

    3、通过对数组数据按照二进制存储方式处理,并求得最终结果,公式如下:

           sum += (a[31-i]*pow(2,i));

    4、打印结果。

    方法二:

    1、输入一个数,并传值给reverse_bit(unsigned int value);

    2、对传进来的数通过对 2 取模方式求得每一位,这一位正好就是反转之后二进制数第一位;

    3、通过对数据按照二进制存储方式处理,并求得最终结果,公式如下:

            sum += (value % 2)*pow(2,31-i);

    源代码:

    方法一:

    注:

    函数 pow(x , y) 返回值为:x 的 y 次幂的值;

    函数头文件为:#include <math.h>;

    #include <stdio.h> #include <math.h> #include <windows.h> #pragma warning(disable:4996) unsigned int reverse_bit(unsigned int value) { int a[32] = { 0 }; int i = 0; int sum = 0; for (i; i < 32; i++) { a[i] = (value % 2); value /= 2; } for (i=0; i < 32; i++) { sum += (a[31-i]*pow(2,i)); } return sum; } int main() { unsigned int value = 0; printf("Please enter a number:"); scanf("%d", &value); int result = reverse_bit(value); printf("%d\n", result); system("pause"); return 0; }

    方法二:

    #include <stdio.h> #include <math.h> #include <windows.h> #pragma warning(disable:4996) unsigned int reverse_bit(unsigned int value) { int i = 0; int sum = 0; for (i; i < 32; i++) { sum += (value % 2)*pow(2,31-i); value /= 2; } return sum; } int main() { unsigned int value = 0; printf("Please enter a number:"); scanf("%d", &value); int result = reverse_bit(value); printf("%d\n", result); system("pause"); return 0; }

    对比:

    很明显方法二比方法一要简洁明了,最重要的是方法二时间、空间复杂度都小于方法一。

    好的程序猿写代码一定要考虑到时间、空间复杂度问题,争取用最优方案。

    最新回复(0)