C语言编程 输出一个数二进制位模式从左到右翻转后的值

eg:
在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;
}

原文地址:https://blog.51cto.com/14232799/2382162

时间: 2024-10-16 22:35:50

C语言编程 输出一个数二进制位模式从左到右翻转后的值的相关文章

二进制位模式从左到右翻转后的值

#include <stdio.h> #include <math.h> unsigned int  reverse_bit(unsigned int value) {  int i = 0, sum = 0;  int ret;  for (i = 0; i < 32; i++)  {   ret = value & 1;      sum = sum + (ret*pow(2, (31 - i)));   value = value >> 1;  }

这个函数的返回 值value的二进制位模式从左到右翻转后的值。

这一种是我自己想出来的方法,发现对二进制还是不太熟悉. #include<stdio.h> #include<stdlib.h> unsigned int  reverse_bit(unsigned int value) {  unsigned sum=0;  int i=0;  for(i=0;i<32;i++)  {   sum+=((value>>i)&1)<<(31-i);  }  return sum; } int main() {

编写函数返回值value的二进制模式从左到右翻转后的值

编写函数: unsigned int  reverse_bit(unsigned int value); 这个函数的返回值value的二进制位模式从左到右翻转后的值. 例如: 在32位机器上25这个值包含下列各位: 00000000000000000000000000011001 翻转后:(2550136832) 10011000000000000000000000000000 程序结果返回: 2550136832 观察输出的结果是将输入的数的二进制逆序排列的值. 代码如下: #include<

二进制位模式从左到右翻转(25~2550136832)

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

写一个函数实现整数的二进制位模式从左到右翻转

如: 在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 累加每一位逆转之后的值-->二进制

c语言实现输出一个数的每一位

比方输入1234.在屏幕上打印出1 2 3 4 代码展示: 方法一: #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<math.h> //实现打印一个数的每一位 int main() { int num = 1234; int count = 0;//用来保存数字的位数 int tmp = num; int y = 0; while (tmp) { ++count; tmp /= 10; } while (n

C语言编程输出100到200的素数的两种方法,和三步优化(逐步优化)

了解素数(只能被自己和1整除的数)概念后,写代码会容易很多 <1>这个版本的程序没有经过优化,是根据最基本的概念写出的代码 #include<stdio.h> #include<stdlib.h> int main() { int i, m; for (i = 100; i <= 200; i++) { for (m = 2; m <= i; m++) { if (i == m)//输出条件 printf("%4d", i); if (i

C语言编程 求两个数的平均值方法(三种方法)

第一种方法是最常见的average=(a + b) / 2这种方式,求两个数的平均值 第二种方法是当 a<b 时averag=a+(b-a)/2 这里着重介绍的是第三种方法 average=(a&b) + (a^b)>>1 推导过程如下a + b = (a&b) 2 + (a^b)) --->average=((a&b)2+(a^b))/2 ---->average=(a&b) + (a^b)>>1 eg:两个数为15和515二进制

翻转一个数的二进制后的值

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