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);