C++中怎么把一个十进制数的某一个二进制位改为0

2025-05-15 10:15:24
推荐回答(5个)
回答1:

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是从高位算的,稍微改改就行了。

回答2:

通过位运算可以快速实现。
以下列举前四位:
首先 二进制中的 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;

通过位运算来实现二进制操作是最快速的,用起来也很方便。

回答3:

你构造一个数,第n位为0,其余为1,然后与上a就ok了

回答4:

int b=1<a&=~b;

回答5:

#include
#include
#include
using namespace std;
int main()
{
int decimal;
cout<<"input the data"<cin>>decimal;
char binary[255];
itoa(decimal, binary, 2);
cout << binary;
cout<<"input the n";
int n;
cin>>n;
binary[n]=0;
cout<return 0;
}