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

如:
在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

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

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

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

这个函数的返回 值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() {

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

#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;  }

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

eg:在32位机器上25这个值包含下列各位:00000000000000000000000000011001翻转后:(2550136832)10011000000000000000000000000000程序结果返回:2550136832 代码核心思想是将原来二进制序列最后一位看作反转后第一位,将原来二进制序列第一位看作反转后最后一位进行重新计算 比如15的2进制为 --0000 1111计算方法为12^1 + 12^2 + 12^3 + 12^4反转后为1111 0000--计算方法为12^3

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

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

写一个函数,对于一个给定的整数,如果它的二进制模式从正向看和反向看是一样的,那么返回true;

写一个函数,对于一个给定的整数,如果它的二进制模式从正向看和反向看是一样的,那么返回true:也就是实现这样一个函数boolean isPalindrome(int x); 分析一下,该题目主要是通过移位来实现,二进制模式从正向看和反向看是一样的,说明这个二进制数两边是对称的, 画个图看看: 代码如下: boolean isPalindrome(int x){ int flag = 1,i,j,temp;    while(1){        if(num&(0x1<<flag)){

经典笔试题:用C写一个函数测试当前机器大小端模式

“用C语言写一个函数测试当前机器的大小端模式”是一个经典的笔试题,如下使用两种方式进行解答: 1. 用union来测试机器的大小端 1 #include <stdio.h> 2 3 union test 4 { 5 int a; 6 char b; 7 }; 8 9 int endian_test(void) 10 { 11 union test t1; 12 t1.a = 1; 13 return t1.b; 14 } 15 16 int main(void) 17 { 18 int i =

c语言:写一个函数建立一个有3名学生数据的单向动态链表

写一个函数建立一个有3名学生数据的单向动态链表. 解:程序: #include<stdio.h> #include<stdlib.h> #define LEN sizeof(struct Student) struct Student { long num; float score; struct Student *next; }; int n; struct Student *creat(void)//定义函数返回一个指向链表头的指针 { struct Student *head

写一个函数实现数组中的元素随机乱序排序

//原生JS写一个函数实现一个shuffle方法,将数组中的元素随机乱序排序 var shuffle = function(arr){ var len,t,rand; for(var i =0;len = arr.length,i<len;i++){ rand = parseInt(Math.random()*len);//parseInt(Math.random()*(len-1-0)+1);或者rand = Math.floor(Math.random()*(len-1-0)+1);即Mat