簡體   English   中英

在 VB.NET 到 C# 中顯示不同結果的二進制移位

[英]Binary Shift displaying different results in VB.NET to C#

我真的很困惑為什么以下代碼在 VB.NET 而不是 C# 中運行時會給我不同的結果。 我已經讀到這兩種語言之間存在一些二進制移位差異,但我無法弄清楚我需要做什么才能使 VB.NET 對“pos”顯示與 C# 相同的答案。

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”的前八個答案都是相同的(預期為零),但是一旦i = 6,ZBD5C8A1AFE53C8BA44444F60C9AF6C03C25Z顯示pos = 124,而ZD7EFA19FA19FBBAR 397D3972FD55ADB60222222223DD574CTHENCENT = 38.380.380.380. 380. 3880. ?

順便說一句,C# 代碼是:

int pos = x[15] << 1;
for (int i = 14; i >= 0; --i)
{
                pos = x[i] << 1;
}

C# << operator 的文檔中

因為移位運算符僅針對 int、uint、long 和 ulong 類型定義,所以運算結果始終包含至少 32 位。 如果左側操作數是另一個整數類型(sbyte、byte、short、ushort 或 char),則其值將轉換為 int 類型

[強調我的。]

VB.NET << operator 的文檔中

結果始終具有與被移位的表達式相同的數據類型。

要在 VB.NET 中獲得與 C# 中相同的結果,您需要使用:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM