【问题标题】:Binary Subtraction VB.NET二进制减法 VB.NET
【发布时间】:2018-09-27 05:41:02
【问题描述】:

我想就 Visual Basic 2010 中的二进制减法寻求一些帮助。感谢@video.baba,我的代码运行良好

Dim BinaryResult As Integer = Convert.ToInt32(TextBox1.Text, 2) + Convert.ToInt32(TextBox2.Text, 2)
Textbox3.Text = BinaryResult.ToString

最终,问题是这样的。如果第一个输入低于第二个输入,这给我一个否定的结果,但答案太远了

例子:

0000 - 1111 = 11111111111111111111111111111001 

必须

0000 - 1111 = -01111

任何帮助将不胜感激。谢谢

【问题讨论】:

  • -01111 不是有效的二进制文件。请问你为什么期望这个输出?目前得到的是正确的,见:dotnetfiddle.net/BGsDry
  • 发生的事情是当你的无符号整数“变为负数”时,它被提升为有符号整数,它使用最左边的位来表示负数和正数(1 = neg,0 = pos)。 If your still confused, this should explain it
  • @VisualVincent 它必须是 0000 - 1111 = -01111 正确,而不是 1111111111111111111111111111001 。寻求帮助,如果什么是最好的代码而不是 vbnet 中的二进制减法
  • 你查看我的链接了吗?你得到的正确的。 -01111 不是有效的二进制数,因为 - 不存在二进制。就像 doom87er 解释的那样,最左边的位(左起第一个)表示数字是正数还是负数。那个长字符串是你的计算机如何表示一个负数,所以这是真正正确的。
  • 好的,谢谢,现在我明白了 :) 顺便说一句,还有其他用于二进制减法的代码吗?谢谢

标签: vb.net binary subtraction


【解决方案1】:

如果您真的希望输出为-01111(或-1111,因为省略了前导零),您必须将数字设为正数,然后在二进制字符串前面加上减号。

然后,在将其转换回来时,您必须删除符号并再次使结果数字为负数。

转换为二进制:

Dim BinaryResult As Integer = Convert.ToInt32(TextBox1.Text, 2) - Convert.ToInt32(TextBox2.Text, 2)

If BinaryResult < 0 Then
    TextBox3.Text = "-" & Convert.ToString(-BinaryResult, 2)
Else
    TextBox3.Text = Convert.ToString(BinaryResult, 2)
End If

从二进制转换:

Dim BinaryResult As Integer

If TextBox3.Text.StartsWith("-") Then
    BinaryResult = -Convert.ToInt32(TextBox3.Text.TrimStart("-"c), 2)
Else
    BinaryResult = Convert.ToInt32(TextBox3.Text, 2)
End If

可重复使用的版本:

Private Function BinarySubtract(ByVal a As String, ByVal b As String) As String
    Dim BinaryResult As Integer = Convert.ToInt32(a, 2) - Convert.ToInt32(b, 2)
    If BinaryResult < 0 Then
        Return "-" & Convert.ToString(-BinaryResult, 2)
    Else
        Return Convert.ToString(BinaryResult, 2)
    End If
End Function

Private Function FromBinary(ByVal s As String) As Integer
    If s.StartsWith("-") Then
        Return -Convert.ToInt32(s.TrimStart("-"c), 2)
    Else
        Return Convert.ToInt32(s, 2)
    End If
End Function

在线测试:https://dotnetfiddle.net/PoQZA6

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    • 1970-01-01
    相关资源
    最近更新 更多