我想Not16位。但答案是错误的。为什么?
问题描述:
我想从列表框中获取16位而不是那些位。但我得到错误的答案任何人都可以帮助我出了什么问题?我想Not16位。但答案是错误的。为什么?
输入= 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 +"");
答
你的问题有点含糊,所以我的答案也是如此。
您正在将二进制字符串解析为int64。基本上,您将11
(字符串,但是对于它是二进制值三)转换为11
(十一进制的十进制值)。
如果你的问题是关于如何“2”位数可以在你的结果展现出来,那么这就是你的答案:当您转换您输入到int64
,转换假设你使用十进制,不是二元的。因此,它解释了一个不同的数学值。
十进制符号允许超过0
和1
,这就是为什么2出现。
如果这不是你的问题,请继续阅读。
在C#(其他语言)中,您在整数中找到的第一位称为“signed”位。如果它是0,你的整数是正数。如果它是1,那么你的整数是负数。
因为你是反转每一位,你也翻转有符号位;因此将您的价值转化为负数。
更改以下行:
long Input = (Int64.Parse(str));
为以下:
ulong Input = (Convert.ToUInt64(str));
这是一个无符号long
。简而言之,它没有有符号位,因此不能变成负数。
答
我认为最重要的问题是要确定您有16位和反转这些。这是通过类型化来实现的。
ushort i = 5;
Console.WriteLine((ushort)~i);
我们不知道您提供了什么输入或您期望的值 - 这些应该在*问题*中,而不是在图片中。请提供[mcve] - 只是一个简单的控制台应用程序。请注意,你的图片看起来像你正在使用二进制 - 'Int64.Parse'将假设十进制... –
使用'Convert.ToInt64(str,2)'二进制字符串长转换。 – Dukeling
@Jon Skeet我在列表框中突出显示了输入,并在消息框中突出显示了答案 – Mo0rteza