我想从Listbox获得16位而不是那些位。但我得错了答案,任何人都可以帮助我解决问题吗?
输入= 1101010101110101 输出= -1101010101110102
预期结果是:0010101010001010 这是我的代码。
public static long NotInputEqualWhichBit(String str)
{
long Input = (Int64.Parse(str));
long notInput = ~Input;
return notInput;
}
我把这个方法称为
string listBoxLine = ListBox_content.Items[2].ToString();
long res2 = checkLogic_Class.NotInputEqualWhichBit(listBoxLine);
MessageBox.Show(res2 +"");
答案 0 :(得分:3)
你的问题有点模糊,所以我的答案也是如此。
您正在将二进制字符串解析为int64。基本上,您将11
(字符串,但是它的二进制值为3)转换为11
(十进制值为11)。
如果您的问题是结果中如何显示“2”数字,那么这就是您的答案:当您将输入转换为int64
时,转化假设为您使用的是十进制表示法,而不是二进制表示法。因此,它解释了不同的数学价值
十进制表示法不仅仅允许0
和1
,因此这就是2出现的原因。
如果那不是你的问题,请继续阅读。
在C#(以及其他语言)中,您在整数中找到的第一个位称为“signed”位。如果为0,则整数为正。如果为1,则整数为负。
因为你反转每一位,你也在翻转有符号位;因此将您的价值变为负数。
更改以下行:
long Input = (Int64.Parse(str));
进入以下内容:
ulong Input = (Convert.ToUInt64(str));
这是无符号 long
。简单地说,它没有有符号的位,因此不能变为负数。
答案 1 :(得分:1)
我认为最重要的问题是你要确定你有16位并反转它们。这是通过类型转换来完成的。
ushort i = 5;
Console.WriteLine((ushort)~i);