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),输出该整数的二进制表示方法中从右端开始的p1到p#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),将该整数的二进制表示方法中从右端开始的p1到p2位取反后输出;
#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),将该整数a的p位设置为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;
}