我们给定数字n,值v(v = 0或1)和位置p。编写一系列更改n的值的操作,因此位置p上的位的值为v。示例:n = 35,p = 5,v = 0-> n = 3。另一个示例:n = 35,p = 2,v = 1-> n = 39。
我无法找到一种方法仅在位置p上使用该位。
如果我做n >> p,例如位数为35 100011 >> 5 = 00001
我不知道如何在这里获得v的值。 从数学上来说,即使我考虑过此操作之后,n的值也变为1而不是3。我完全困惑,因为我无法向自己解释这个问题。
Console.Write("Enter n: ");
int n = Convert.ToInt32(Console.ReadLine());
Console.Write("Enter p: ");
int p = Convert.ToInt32(Console.ReadLine());
Console.Write("Enter v: ");
int v = Convert.ToInt32(Console.ReadLine());
int mask = n >> 5;
Console.WriteLine(mask);
答案 0 :(得分:5)
我会采用这种方法:
<<
运算符计算出位的移位值v
为1,请使用|
设置该位&
(和~
进行按位求反以创建蒙版)将其清除类似这样:
int shifted = 1 << p;
if (v == 1)
{
n |= shifted; // Set the bit
}
else
{
// Clear the bit, by masking with the bitwise inverse of the shifted value
n &= ~shifted;
}