我无法在 C# 中解决的运算符和表达式问题

Operators and Expressions Problem that I can not solve in C#

我们得到了数字 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 上使用该位的方法。

如果我用一个数字(例如 35 位)执行 n >> p,我将得到 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);

我会采用这种方法:

  • 使用 << 运算符
  • 计算位的移位值
  • 如果 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;
}