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

gro*_*eto 3 c# expression operators

我们给出数字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);
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 6

我会采取这种方法:

  • 使用<<运算符计算出位的移位值
  • 如果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;
}
Run Code Online (Sandbox Code Playgroud)

  • @grozdeto:你了解它的每个部分吗?只是拥有代码并不是非常有用.如果你有什么需要我澄清的话,请告诉我. (2认同)