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)
我会采取这种方法:
<<
运算符计算出位的移位值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)
归档时间: |
|
查看次数: |
126 次 |
最近记录: |