位运算习题

来源:互联网 发布:南阳网络推广哪家专业 编辑:程序博客网 时间:2024/06/05 07:28

1. 题目:请编写一个c函数,该函数给出一个字节中被置为1的位的个数

#include <stdio.h>


void fun(char a)
{
    int i;
    int temp;
    int count = 0;


    for(i = 0;i < 8;i++)
    {
        temp = (a>>i) & 1;
 if(temp == 1)
 {
     count++;
 }
    }
    printf("result = %d\n",count);
}
int main()
{
    char a;

    printf("please input char:\n");
    scanf("%c",&a);

    fun(a);

    return 0; 
}

2. 题目:输入一个整数a,再输入两个整数p1,p2(p1,p2<32),输出该整数的二进制表示方法中从右端开始的p1p#include <stdio.h>

void fun(int a,int p1,int p2,char *ps)
{
    int i;
    char temp;
    static int size = 8 * sizeof(int);

    for(i = size - 1;i >= 0;i--,a >>= 1)
    {
        ps[i] = (01 & a) + '0';
    }
    ps[size] = '\0';
    for(i = 0;i <= size/2;i++)
    {
        temp = ps[i];
 ps[i] = ps[size - i -1];
        ps[size - i -1] = temp;
    }
    for(i = p2 ;i >= p1;i--)
    {
        printf("%c",ps[i]);
    }
    printf("\n");
}

int main()

    int i;
    int a;
    int p1;
    int p2;

    char src[8 * sizeof(int) - 1];
    printf("please input number :\n");
    scanf("%d",&a);
    printf("please input p1,p2(<= 32)\n");
    scanf("%d%d",&p1,&p2);
    
    fun(a,p1,p2,src);
    return 0;
}
2
.


3. 题目:输入一个整数a,再输入两个整数p1,p2(p1,p2<32),将该整数的二进制表示方法中从右端开始的p1p2位取反后输出;

#include <stdio.h>

void fun(int a,int p1,int p2)
{
    int t;
    int temp;
    if(p1 > p2)
    {
        temp = p1;
 p1 = p2;
 p2 = temp;
    }
    for(t = 1 << p2;t >= 1 << p1;t >>= 1)
    {
        if(a & t)
 {
     printf("0");
 }
 else
 {
     printf("1");
 }
 
    }
    printf("\n");
}

int main()

    int a;
    int p1;
    int p2;

    printf("please input number :\n");
    scanf("%d",&a);
    printf("please input p1,p2(<= 32)\n");
    scanf("%d%d",&p1,&p2);
    
    fun(a,p1,p2);
    return 0;
}

4. 题目:输入一个整数a,再输入两个整数p(p<32),v(0|1),将该整数ap位设置为v,输出修改后的该整数的二进制表示.

#include <stdio.h>

void fun(int a,int p,int v)
{
     int i;
     int temp;
     int src[32];

     for(i = 0;i < 32;i++,a >>= 1)
     {
         if(i == p)
  {
      src[i] = v;
  }
  else 
  {
      src[i] = 01 & a;
  }
     }
     for(i = 0;i <= 16;i++)
     {
         temp = src[i];
  src[i] = src[32 - i - 1];
         src[32 - i - 1] = temp;
     }
     for(i = 0;i < 32;i++)
     {
         printf("%d",src[i]);
     }
     printf("\n");
}

int main()
{
    int a;
    int p;
    int v;

    printf("please input a:\n");
    scanf("%d",&a);
    
    printf("please input p:\n");
    scanf("%d",&p);

    printf("please input v(0|1):\n");
    scanf("%d",&v);

    fun(a,p,v);

    return 0;
}

0 0
原创粉丝点击