输入一个整数a,二进制a的右侧第i个必须设置为0,而不改变其他数
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int i;
scanf("%d",&i);
int b = 1;
b = b<<i;
a = a^b;
printf("%d",a);
return 0;
}
#include <stdio.h>
int main()
{
int a,i;
int b = 1;
scanf("%d %d",&a,&i);
b << (i-1); //1左移i-1位
a = (~b)&a; //b按位取反后与a进行与运算
printf("%d",a);
return 0;
}
回答:“右侧第i个”,假定为“从右往左数第i个数”,代码如下(C++编写,用栈肯定更简单):
#include<iostream>
using namespace std;
int main()
{
int a,n,num=0,b[10]={0};
cout<<"请输入一个数及它的第i位(例如10,3):";
cin>>a>>n;
cout<<"二进制数为(逆序):";
while(a!=0){
cout<<a%2;
b[num]=a%2;
a=a/2;
num++;
}
cout<<endl;
b[n-1]=0;
cout<<"修改后:";
for(int i=num;i>0;i--){
cout<<b[i-1];
}
}