Jam*_*_BK 1 vb.net biginteger bit-shift bit
我有一个字符串,我通过解析转换为BigInteger然后将其向左移3位并再次转换为字符串.问题是它总是在实际值之前输出额外的位.例如:
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
Dim positiveString As String = "C0020ACB1086886D8C2E4D2DEDC726A6"
Dim posBigInt As BigInteger = 0
posBigInt = BigInteger.Parse(positiveString, System.Globalization.NumberStyles.AllowHexSpecifier)
posBigInt = posBigInt << Hex(3)
RichTextBox1.Text = posBigInt.ToString("X")
End Sub
Run Code Online (Sandbox Code Playgroud)
价值之前的"E"是我无法解释的.我尝试了不同的十六进制字符串但它总是产生那些额外的位 我究竟做错了什么?
Dim positiveString As String = "C0020ACB1086886D8C2E4D2DEDC726A6"
Run Code Online (Sandbox Code Playgroud)
它实际上并不是正面的,很容易用调试器看到.大概你看到了.该十六进制文字的符号位打开,C = 1100二进制.符号位是值中最高有效位,即1100中的前1位.该位不会参与该值,它仅指示符号.
使其成为正面,即关闭符号位,很容易做到.固定:
Dim positiveString As String = "0C0020ACB1086886D8C2E4D2DEDC726A6"
Run Code Online (Sandbox Code Playgroud)
更多关于二进制补码编码,该处理器目前编码负数的标准方法,是可以在这里找到.