Menu

C语言之二进制位翻转,请编写函数

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

主题素材陈诉:

 

编写制定函数:

unsigned int  reverse_bit(unsigned int value);

其一函数的回到 值value的二进制位方式从左到右翻转后的值。

如:

在三拾一个人机器上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;
}

 

难点陈说:
编写函数: unsigned int reverse_bit(unsigned int value); 这几个函数的回到
值value的二进制位情势从…

C语言面试演习题,请编写函数,练习题函数

题目:请编写函数

unsigned int reverse_bits(unsigned int value);

以此函数的重临值是把value的二进制位格局从左到右转换一下后的值。举个例子,在32人机器上,25那个值富含下列各类位:

0000 0000 0000 0000 0000 0000 0001 1001

函数的重回值应该是2550 136 832,它的二进制位是:

1001 1000 0000 0000 0000 0000 0000 0000

上面有二种格局消除,三种都用到了活动操作,但第三种更加深邃些。

代码如下:

#include 
#include 
#include 
#include 

unsigned int reverse_bit(unsigned int value)
{
    unsigned int sum = 0;
    int i = 0;
    int bit = 0;
    for (i = 0; i <= 31; i++)
    {
        bit = value & 1;
        sum += bit * pow(2, (31-i)); //pow(i,j)表示i^j; 
        value = value >> 1;
    } 
    return sum;
}
unsigned int reverse_bits(unsigned int value)
{

    unsigned int answer;
    unsigned int i;

    answer = 0;
    /*
    **只要i不是0就继续进行,这就使循环与机器字长无关,从而避免了可移植性问题
    */
    for (i = 1; i != 0; i <<= 1)   //控制循环次数
    {
        answer <<= 1;     //answer左移
        if (value & 1)
        {
            answer |= 1;
        }
        value >>= 1;        //value右移,一位一位进行比较
    }
    return answer;  
}
int main()
{
    printf("%u\n", reverse_bit(25));//reverse_bit的调用
    printf("%u\n", reverse_bits(25));//reverse_bits的调用
    return 0;
}

标题:请编写函数 unsigned int reverse_bits(unsigned int value);
那一个函数的再次来到值是把value的二进制位…

标签:,

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章

网站地图xml地图