题目:
思考:此题目是关于无符号十进制函数编写。利用变量i循环,变量z作为最终结果和形参,主要过程是value的变化。
000000000000000000000011001如何翻转。利用c语言中的右移动运算符(>>)做到翻转,将value的值右移然后和1进行与运算之后乘以对应位的权值。
z+=((value>>i)&1)*pow(2,31-i);
代码:
#include<stdio.h>
#include<math.h>
unsigned int reverse_bit(unsigned int value)
{
int i = 0;
unsigned int z = 0;
for (i=0;i<32;i++)
{
z+=((value>>i)&1)*pow(2,31-i);
}
return z;
}
int main()
{
int n=25;
unsigned int z = 0;
z=reverse_bit(n);
printf("翻转之后结果:%u\n", z);
}
代码结果:
总结:
关于右移动运算符(>>):
右移运算右移运算符“>>”是双目运算符。其功能是把“>> ”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。
例如:设 a=15,a>>2 表示把000001111右移为00000011(十进制3)。应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定。