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

时间:2018-11-06 14:28:54

标签: c# operators expression

我们给定数字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);

1 个答案:

答案 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;
}