C语言之二进制位翻转,难难难!!!

问题描述:

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

如:
在32位机器上25这个值包含下列各位:
00000000000000000000000000011001
翻转后:(2550136832)
10011000000000000000000000000000
程序结果返回:
          2550136832

代码实现:

#include <stdio.h>
#include <math.h>
unsigned int  reverse_bit(unsigned int value)
{
 int i=0;
 unsigned int sum=0;
 for(i=0;i<32;i++)
 {
  sum+=((value>>i)&1)*pow(2,31-i);
 }
 return sum;
}
int main()
{
 unsigned int value=25;//00000000 00000000 00000000 00011001
 int ret=reverse_bit(value);
 printf("%u\n",ret);
 return 0;
}

结果是:2550136832 .    //10011000 00000000 00000000 00000000

时间: 2024-10-14 08:00:07

C语言之二进制位翻转,难难难!!!的相关文章

关于把一个无符号数的二进制位翻转的两种实现方法

#include <stdlib.h> #include <stdio.h> #include <math.h> unsigned int reserve_bit(unsigned int num)//采用移位的方法使一个数的二进制位翻转后返回 { unsigned int ret = 0; int bit = 0; int i = 0; for (i = 0; i < 32; i++) { ret <<= 1; bit = num & 1;

【c语言】实现翻转字符串函数reverse_string

函数reverse_string(char * string) 实现:将参数字符串中的字符反向排列. 要求:不能使用C函数库中的字符串操作函数. #include <stdio.h> #include<stdlib.h> #define SWAP(a,b,c) ((c)=(a),(a)=(b),(b)=(c)) void reverse_string(char * s) { char *p=s; char temp; while(*p) p++; //让p指向最后一个字符 p--;

C语言实现快速翻转数组的顺序

#include <stdio.h> void Reverse(int *p , int size) { int i , tmp; for(i = 0 ; i < size/2 ; i++) { tmp = p[i] ; p[i] = p[size-1-i] ; p[size-1-i] = tmp ; } } int main(void) { int i ; int buffer[] = {1,2,3,4,5,6,7} ; Reverse(buffer,7); for(i = 0 ; i

redis源码分析3---结构体---字典

redis源码分析3---结构体---字典 字典,简单来说就是一种用于保存键值对的抽象数据结构: 注意,字典中每个键都是独一无二的:在redis中,内部的redis的数据库就是使用字典作为底层实现的: 1 字典的实现 在redis中,字典是使用哈希表作为底层实现的,一个hash表里面可以有多个hash表节点,而每个hash表节点就保存了字典中的一个键值对: hash表定义 table属性是一个数组,数组中的每个元素都是一个指向dictEntry结构的指针,每个dictEntry结构保存着一个键值

【BZOJ2179】FFT快速傅立叶 高精度乘模板题

广告: #include <stdio.h> int main() { puts("转载请注明出处[vmurder]谢谢"); puts("网址:blog.csdn.net/vmurder/article/details/44015679"); } 题解: 其实没什么题解,只是贴个模板+理解注释 代码: #include <cmath> #include <cstdio> #include <cstring> #inc

[bitset用法]SDUT 2841 Bit Problem

来源:点击打开链接 可以模拟过,不过练习这个题的目的是学习stl中的bitset,一个神奇的二进制容器. 和vector/MAP等容器一样,bitset具备stl库函数的几乎所有特性,同时加入了一些自己的东西,对二进制处理十分便利,尤其是在找零和找一的方面. ps:遍历的话,bitset默认是从后往前遍历的.所以不要自己再倒过来了. 一些库函数及用法的实例: 典型的bitset初始化示例 bitset<16> bi(0xffff);:初始化为unsigned值 bitset<32>

美团针对Redis Rehash机制的探索和实践

背景 Squirrel(松鼠)是美团技术团队基于Redis Cluster打造的缓存系统.经过不断的迭代研发,目前已形成一整套自动化运维体系,涵盖一键运维集群.细粒度的监控.支持自动扩缩容以及热点Key监控等完整的解决方案.同时服务端通过Docker进行部署,最大程度的提高运维的灵活性.分布式缓存Squirrel产品自2015年上线至今,已在美团内部广泛使用,存储容量超过60T,日均调用量也超过万亿次,逐步成为美团目前最主要的缓存系统之一. 随着使用的量和场景不断深入,Squirrel团队也不断

[拉格朗日反演][FFT][NTT][多项式大全]详解

1.多项式的两种表示法 1.系数表示法 我们最常用的多项式表示法就是系数表示法,一个次数界为\(n\)的多项式\(S(x)\)可以用一个向量\(s=(s_0,s_1,s_2,\cdots,s_n-1)\)系数表示如下:\[S(x)=\sum_{k=0}^{n-1}s_kx^k\] 系数表示法很适合做加法,可以在\(O(n)\)的时间复杂度内完成,表达式为:\[S(x)=A(x)+B(x)=\sum_{k=0}^{n-1}(a_k+b_k)x^k\] 当中\[s_k=a_k+b_k\] 但是,系数

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

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