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