2017-05-04 68 views
-2

我想从列表框中获取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 +""); 
+6

我们不知道您提供了什么输入或您期望的值 - 这些应该在*问题*中,而不是在图片中。请提供[mcve] - 只是一个简单的控制台应用程序。请注意,你的图片看起来像你正在使用二进制 - 'Int64.Parse'将假设十进制... –

+3

使用'Convert.ToInt64(str,2)'二进制字符串长转换。 – Dukeling

+0

@Jon Skeet我在列表框中突出显示了输入,并在消息框中突出显示了答案 – Mo0rteza

回答

3

你的问题有点含糊,所以我的答案也是如此。

您正在将二进制字符串解析为int64。基本上,您将11(字符串,但是对于它是二进制值三)转换为11(十一进制的十进制值)。

如果你的问题是关于如何“2”位数可以在你的结果展现出来,那么这就是你的答案:当您转换您输入到int64,转换假设你使用十进制,不是二元的。因此,它解释了一个不同的数学值。
十进制符号允许超过01,这就是为什么2出现。

如果这不是你的问题,请继续阅读。

在C#(其他语言)中,您在整数中找到的第一位称为“signed”位。如果它是0,你的整数是正数。如果它是1,那么你的整数是负数。

因为你是反转每一位,你也翻转有符号位;因此将您的价值转化为负数。

更改以下行:

long Input = (Int64.Parse(str)); 

为以下:

ulong Input = (Convert.ToUInt64(str)); 

这是一个无符号long。简而言之,它没有有符号位,因此不能变成负数。

1

我认为最重要的问题是要确定您有16位和反转这些。这是通过类型化来实现的。

ushort i = 5; 
Console.WriteLine((ushort)~i); 
相关问题