我有一个字符串,我将通过解析将其转换为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
值之前的“ E”是我无法解释的。我尝试了不同的十六进制字符串,但是它总是产生那些额外的位。我在做什么错了?
答案 0 :(得分:5)
List<ProductInCategory> unCategorize = await _context.ProductsInCategories
.Where(pic => products.Select(p => p.Id).Contains(pic.ProductId)
&& pic.ProductCategoryId == secondary_id)
.ToListAsync();
实际上不是肯定的,可以通过调试器轻松查看。想必您看到了。该十六进制文字的符号位已打开,C = 1100(二进制)。符号位是值中的最高有效位,即1100中的第一个1。否则,该位不参与值,仅指示符号。
很容易做到这一点,即关闭符号位。修复:
Dim positiveString As String = "C0020ACB1086886D8C2E4D2DEDC726A6"
关于二进制补码(当今处理器对负数进行编码的标准方式)的更多信息是available here。