2012.07.07

来源:互联网 发布:烈火之剑JAVA全升 编辑:程序博客网 时间:2024/06/04 19:31

1、编写一个c函数,该函数给出一个字节中被置为1的位的个数.
#include<stdio.h>
unsigned int CounteOne0(char Log)
{
    unsigned int num = 0;
    int var = 0;
    int counter = 0;
    for (; counter < 10; counter++)
  {
    var = Log&0x01;
    if (var)
  {
    num++;
  }
    Log = Log>>1;
  }
    return num;
  }
    int main()
{
    unsigned int num = 0;
    num = CounteOne0(33);
    printf("%d",num);
}
2、输入一个整数a,再输入两个整数p1,p2(p1,p2<32),输出该整数的
二进制表示方法中从右端开始的p1到p2位.

3、输入一个整数a,再输入两个整数p1,p2(p1,p2<32),将该整数的二进制
表示方法中从右端开始的p1到p2位取反后输出
#include<stdio.h>
int f(long n,int p1,int p2)
{
    long t;
    if(p1>p2)
  {
    int temp=p1;
    p1=p2;
    p2=temp;
  }
    for(t=1<<p1;t<=1<<p2;t<<=1)
  {
    if(n & t)
    printf("1");
    else
    printf("0");
  }
}
int main()
{
    long n;
    int p1,p2;
    scanf("%ld",&n);
    scanf("%d%d",&p1,&p2);
    f(n,p1,p2);
}
4、输入一个整数a,再输入两个整数p(p<32),v(0|1),将该整数a的p位设置为v,
输出修改后的该整数的二进制表示.

5、输入一个32位的整数a,使用按位异或^运算,生成一个新的32位整数b,
使得该整数b的每一位等于原整数a中该位左右两边两个bit位的异或结果
#include <stdio.h>
int main(void)
{
    int a=100,b=0;
    unsigned j,i;
    printf("please enter a number!\nDec=");
    scanf("%d",&a);
    for(i=0x80000000;!(i&a);i>>=1);
    for(j=i<<1,i>>=1;i;j>>=1,i>>=1)
    b=2*b+(a&j || 0) ^ (a&i || 0);
    printf("%X\n",b=2*b+(a&j || 0) ^ 0);
}