我无法在 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;
}
我们得到了数字 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;
}