Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何取消设置整数中的特定位_C#_Java_C++_C - Fatal编程技术网

C# 如何取消设置整数中的特定位

C# 如何取消设置整数中的特定位,c#,java,c++,c,C#,Java,C++,C,比如说,我有一个像10101这样的整数,我想取消第三位的设置以得到10001;如果我有10001,我仍然会得到10001;我怎样才能做到呢 unset(int i, int j) int i= 10101 or 10000 int j = 00100 在C++和C++中使用P 来形成一个和掩码: 10101 & 10001 在Java中: int num = 0b10101; int mask = 1 << bitPosition; System.out.printl

比如说,我有一个像
10101
这样的整数,我想取消第三位的设置以得到
10001
;如果我有
10001
,我仍然会得到
10001
;我怎样才能做到呢

unset(int i, int j)
int i= 10101 or 10000
int j = 00100
在C++和C++中使用P<强> <强>来形成一个和掩码:

10101 & 10001

在Java中:

int num = 0b10101;
int mask = 1 << bitPosition;

System.out.println(Integer.toBinaryString(num));
num &= ~mask;
System.out.println(Integer.toBinaryString(num));
int num=0b10101;

int mask=1如果您处理的是普通数字,那么您可以只处理十六进制数字。将位模式转换为十六进制数:

10101 => 0x15
00100 => 0x04
因此,下面的C代码将
b
设置为您想要的结果

int a = 0x15;
int b = a & ~( 0x04 );
如果你想要一些通用的东西,你可以有一个C函数(去掉所有的范围检查),比如

int clearBit(int值,int位)
{
//假设我们从1开始计算位

返回值&~(1假设您是从右侧索引位,这应该可以在
值中取消设置特定位:

int mask = 1 << bitIndex;
value &= ~mask;

其中,
掩码
与前面一样。(假设位索引从0开始。)

清除或取消设置位

使用按位AND运算符(&)清除位

 number &= ~(1 << x); 

number&=~(1您可以切换第n位


result=number^(1您能决定使用哪种语言吗?请告诉我们您实际使用的编程语言。(问题中的“代码”在您标记问题的任何语言中都无效。)不正确。您的代码仅适用于
N=3
N
第位由
(1@EJP啊,我输入这个时已经晚了,修正了。这对设置任意位没有帮助,因为你必须提前创建掩码。@QuinnTaylor:OP知道他要设置的位,并在Q中明确表示,因为我担心评论和否决只是迂腐的噪音。这个“解决方案”的问题就是OP已经形成了掩码
10001
,而这正是OP试图计算的。(我把OP的问题理解为询问一般情况,当一个人不知道
I
的实际值,却想将特定位归零。)切换未清除。OP希望位保持为0(如果已为0)。
value |= mask;
 number &= ~(1 << x);