好的,我有N =整数,P =位置,V = 0或1
我必须将整数N的位置P的位改为值V.
我正在尝试用
N = 5(101)
P = 2(取1)
V = 0(必须使其为零)
结果是97(1100 0001)(应该是0000 0001)
我认为问题来自掩码,因为当我在控制台中写入它的-5(应该是)但是如果我解析它,看到它的位我得到一个错误(溢出)
该程序正在制定中,所以我目前正在研究 V = 0 ,所以不要尝试1
昨天我发了一个问题,很多人发帖说“这不是问题 - 你要我们解决你的问题”
- 不,我不想让你解决我想知道的问题为什么在int result = mask& integerBinary;我得到97而不是1
using System;
class ChangeBit
{
static void Main()
{
Console.Write("(n) Type an integer: ");
string integerLine = Console.ReadLine(); // Read string from console
Console.Write("(p) Type position: ");
string positionLine = Console.ReadLine(); // Read string from console
Console.Write("(v) Type 0 or 1: ");
string valueLine = Console.ReadLine(); // Read string from console
int value;
int integer;
int position;
if (int.TryParse(integerLine, out integer) && int.TryParse(positionLine, out position) && int.TryParse(valueLine, out value)) // Try to parse the strings as integers
{
int integerBinary = int.Parse(Convert.ToString(integer, 2));
int bitValue = ((1 << position) & integerBinary) >> position;
int mask = ~(1 << position);
if (value==0)
{
int result = mask & integerBinary;
Console.WriteLine("(n) After bit conversion = {0}", result);
}
else Console.WriteLine("(n) After bit conversion = {0}", integer);
}
else
{
Console.WriteLine("Invalid input.");
}
}
}
答案 0 :(得分:1)
更容易:
if (int.TryParse(integerLine, out integer) && int.TryParse(positionLine, out position) && int.TryParse(valueLine, out value)) // Try to parse the strings as integers
{
BitArray a = new BitArray(BitConverter.GetBytes(integer));
a.Set(position, value == 1);
Console.WriteLine("(n) After bit conversion = {0}", a.GetInt32());
}
声明GetInt32:
internal static class BitArrayEx
{
internal static int GetInt32(this BitArray bitArray)
{
int[] array = new int[1];
bitArray.CopyTo(array, 0);
return array[0];
}
}
答案 1 :(得分:1)
尝试:
integer ^ ((-value ^ integer) & (1 << position))
这将检查该位是否已设置,如果是,将使用按位运算符 ^ 更改其值。
答案 2 :(得分:0)
您正在将二进制字符串表示与二进制整数混合使用:
int integerBinary = int.Parse(Convert.ToString(integer, 2));
此行integerBinary
之后的
是因为您已将其从101
的二进制字符串表示形式"101"
转换而来。之后所有整数操作都是无效的,因为101没有意义。
答案 3 :(得分:0)
此代码有两个问题 第一
int integerBinary = int.Parse(Convert.ToString(integer, 2));
不需要,导致输入整数可以直接用来做逻辑运算, 并且这一行并不意味着将整数转换为二进制格式,此行整数变为不同的数字
第二
else Console.WriteLine("(n) After bit conversion = {0}", integer);
如果值为1,您仍需要做一些事情(如果原始位置为0)
所以正确的代码可能
if (int.TryParse(integerLine, out integer) && int.TryParse(positionLine, out position) && int.TryParse(valueLine, out value)) // Try to parse the strings as integers
{
int mask= (1<< position);
int temp = mask | integer;
int mask2 = ~((1-value)<<position);
int result = mask2 & temp;
result = mask & result;
Console.WriteLine("(n) After bit conversion = {0}", result);
}