1.题目:请编写一个c函数,该函数给出一个字节中被置为1的位的个数#include <stdio.h>
#include <stdio.h>
int func(int num)
{
int p;
int i = 0;
int count = 0;;
for(i = 0;i < 8;i++)
{
p = num % 2;
num = num / 2;
if(p == 1)
count ++;
}
return count;
}
int main()
{
char ch;
ch = getchar();
int num;
num = ch;
printf("%d\n",func(num));
}
2.题目:输入一个整数a,再输入两个整数p1,p2(p1,p2<32),输出该整数的二进制表示方法中从右端开始的p1到p2位.
#include "stdio.h"
void func(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);
func(n,p1,p2);
}
3.题目:输入一个整数a,再输入两个整数p1,p2(p1,p2<32),将该整数的二进制表示方法中从右端开始的p1到p2位取反后输出
#include <stdio.h>
void func(int p1,int p2,int num[])
{
int n = p2 - p1;
int i = 0;
for(i=n;i>=0;i--)
{
printf("%d",num[i]);
}
printf("\n");
}
int funy(int n,int p1,int p2,int num[])
{
int i=0;
int temp=0;
int a[32];
int k = 0;
for(i=p1-1;i<=p2;i++)
{
temp =!((n>>i)&1);
num[k] = temp;
k++;
}
}
int main()
{
int n;
int p1,p2;
int num[32]={0};
printf("请输入一个整数:");
scanf("%d",&n);
printf("请输入p1和p2(p1<p2):");
scanf("%d %d",&p1,&p2);
funy(n,p1,p2,num);
printf("n在p1到p2的位为:");
func(p1,p2,num);
return 0;
}
4.题目:输入一个整数a,再输入两个整数p(p<32),v(0|1),将该整数a的p位设置为v,输出修改后的该整数的二进制表示.
#include <stdio.h>
int func(int a)
{
int i=0;
int sum=0;
int n=a;
int x=0;
int temp=0;
for(i=0;i<32;i++)
{
x = (a>>i)&1;
if(i>0 && i<31)
{
if(( (n>>(i-1))&1)==((n>>(i+1))&1))
{
x=0;
}
else
{
x = 1;
}
}
temp = i;
while(temp)
{
x = x*2;
temp--;
}
sum = x +sum;
}
printf("使用按位异或^运算后b:%d\n",sum);
}
int main()
{
int a,v,p1,p2;
printf("请输入一个整数:");
scanf("%d",&a);
func(a);
return 0;
}
5.题目:输入一个32位的整数a,使用按位异或^运算,生成一个新的32位整数b,使得该整数b的每一位等于原整数a中该位左右两边两个bit位的异或结果
#include <stdio.h>
int func(int num[])
{
int i=0;
for(i=31;i>=0;i--)
{
printf("%d",num[i]);
}
printf("\n");
}
int num(int a,int v,int p1,int p2,int num[])
{
int i=0;
int temp=0;
for(i=0;i<32;i++)
{
if(i<(p1-1))
{
temp = (a>>i) & 1;
num[i]=temp;
}
else if(i<=p2-1 && i>=p1-1)
{
num[i] = v;
}
else
{
temp = (a>>i) & i;
num[i] = temp;
}
}
}
int main()
{
int a,v,p1,p2;
int temp[32]={0};
printf("请输入一个整数:");
scanf("%d",&a);
printf("请输入v(0|1),p1,p2(p1<p2):");
scanf("%d %d %d",&v,&p1,&p2);
num(a,v,p1,p2,temp);
printf("二进制输出:");
func(temp);
return 0;
}
提示:0 ^ 0 = 0; 1 ^ 1 = 0; 0 ^ 1 = 1; 1 ^ 0 = 1;