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);
}