int change(int x, int n) { // 这里的n都是从0开始的
// 高位的话插一句 n = sizeof(int)*8-n-1
return x & ~(1 << n);
}
先把1左移n位,得到00010000形式的一个数字,然后取反得到11101111形式的数字,然后和原来的数进行“位与”操作。与0得0,与1不变。所以第n位就变成0其他位不变。如果你的n是从高位算的,稍微改改就行了。
通过位运算可以快速实现。
以下列举前四位:
首先 二进制中的 0001 0010 0100 1000
对应十进制中的 1 2 4 8
如果要让一个数x的第三位二进制位变为0 操作为
if(x | 4) x^=4; //如果 x在第三位为1 x 异或 0100
关于异或:
0^0=0
0^1=1
1^0=1
1^1=0;
通过位运算来实现二进制操作是最快速的,用起来也很方便。
你构造一个数,第n位为0,其余为1,然后与上a就ok了
int b=1<
#include
#include
#include
using namespace std;
int main()
{
int decimal;
cout<<"input the data"<
char binary[255];
itoa(decimal, binary, 2);
cout << binary;
cout<<"input the n";
int n;
cin>>n;
binary[n]=0;
cout<
}