我想要16位。但答案是错的。为什么?

时间:2017-05-04 06:59:31

标签: c#

我想从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 +"");

2 个答案:

答案 0 :(得分:3)

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

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

如果您的问题是结果中如何显示“2”数字,那么这就是您的答案:当您将输入转换为int64时,转化假设为您使用的是十进制表示法,而不是二进制表示法。因此,它解释了不同的数学价值 十进制表示法不仅仅允许01,因此这就是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);