实现数值二进制模式下翻转

    xiaoxiao2025-08-29  10

    编写函数: unsigned int reverse_bit(unsigned int value); 这个函数的返回值是value的二进制位模式从左到右翻转后的值。

    如: 在32位机器上25这个值包含下列各位: 00000000000000000000000000011001 翻转后:(2550136832) 10011000000000000000000000000000 程序结果返回: 2550136832 【解题思路】 定义一个ret=0,tmp value每次和1进行 & 运算得到value的最后一位数字赋值给tmp value右移,为下次对tmp的赋值做准备。 最后将ret和tmp或运算赋值给ret。(或运算1 | 0=1)(1 | 1=1)。 for循环32次,依次赋给ret,从而实现倒叙

    #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> /* unsigned int reverse_bit(unsigned int value); 这个函数的返回值是value的二进制位模式从左到右翻转后的值。 */ unsigned int reverse_bit(unsigned int value) { int ret = 0; int tmp = 0; for (int i=0; i < 32; i++) { ret = ret << 1;//左移一位,保存前一位 tmp = value & 1;//取出最后一位 value = value >> 1;//值右移, 取下一位 ret = ret | tmp;//最后一位赋给ret } return ret; } int main() { int input = 0; printf("请输入一个数字:\n"); scanf("%d", &input); printf("%u\n",reverse_bit(input)); system("pause"); return 0; }
    最新回复(0)