今天这个位运算搞了我半天,总算弄明白了。虽然感觉用的不多,但对计算机每一位的操作也是一种能力。
/*
* 2017年7月21日16:20:38
4.题目:输入一个整数a,再输入两个整数p(p<32),v(0|1),
将该整数a的p位设置为v,输出修改后的该整数的二进制表示.
* */
#include<stdio.h>
void change(int *p,int n,int v)
{
if (v==0)
*p = *p & ~(1<<(n-1));
else
*p = *p | (1<<(n-1));
printf("改过以后的编码是:\n");
int i,tmp;
for (i=31;i>=0;i--)
{
if (i!=31)
{
if ((i+1)%4 ==0)
printf(" ");
}
tmp = (*p>>i)&1;
printf("%d",(tmp)?1:0);
}
putchar('\n');
}
int main()
{
int a;
int p1,v;
printf("请输入一个整数a = ");
scanf("%d",&a);
printf("请再输入一个整数p(小于32) = ");
scanf("%d",&p1);
printf("v(0或1) = ");
scanf("%d",&v);
printf("原来的编码是:\n");
int i,tmp;
for (i=31;i>=0;i--)
{
if(i!=31)
{
if ((i+1)%4 ==0)
printf(" ");
}
tmp = (a>>i)&1;
printf("%d",(tmp)?1:0);
}
putchar('\n');
change(&a,p1,v);
}