Binary Shift在VB中显示不同结果..NET转换为c#



我真的很困惑,为什么下面的代码在VB中运行时会给我不同的结果。. NET,而不是c#。我读到两种语言之间存在一些二进制移位差异,但我无法找出我需要做什么来制作VB。. NET显示与c#相同的'pos'答案。

Imports System.Threading
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
MultiplyH({168, 238, 95, 83, 235, 11, 228, 190, 8, 58, 0, 0, 0, 0, 0, 0})

End Sub
Public Sub MultiplyH(ByVal x As Byte())
Dim pos As Integer = x(15) << 1
Dim i = 14
While i >= 0
pos = x(i) << 1
Interlocked.Decrement(i)
End While
End Sub
End Class

'pos'的前八个答案都是相同的(对于0来说是预期的),但是一旦i = 6, VB。NET显示pos = 124,而c#显示pos = 380。谁能帮助我,使pos = 380在VB。净吗?

c#代码,顺便说一下,是:
int pos = x[15] << 1;
for (int i = 14; i >= 0; --i)
{
pos = x[i] << 1;
}

来自c#<<操作符的文档:

由于移位操作符仅针对int、uint、long和ulong类型定义,因此操作的结果总是至少包含32位。如果左操作数为其他整型(sbyte、byte、short、ushort或char),则将其值转换为整型

(我强调。)

来自VB的文档。. NET<<操作符:

结果总是与被移位表达式的数据类型相同。

在VB中得到相同的结果。. NET中,你需要使用:

pos = CInt(x(i)) << 1

相关内容

  • 没有找到相关文章

最新更新