BitArray.And VB.Net 中的方法

BitArray.And method in VB.Net

我正在学习 VB.Net 并面临来自以下代码的意外结果 - 运行 Visual Studio 中的这个:

有4个BitArrays: bit1, bit2, bit3 和 bit4 bit1 的值为 60 bit2 的值为 13 位 3 = 位 1 和(位 2) bit4 = bit1 或(bit2) 每个数组的字节显示是正确的 - 但是,当使用 CopyTo 将 BitArray 转换为整数数组时,bit4 returns 值 13 应为 61。如果注释掉 bit3 部分,则 bit4 然后 returns 61 的正确值。如果更改 bit3 = bit1 Xor(bit2) 而不是“And”,则 bit4 也 returns 正确值 - 我不确定我在这里遗漏了什么...... 谢谢您的帮助! 以下是代码:

Imports System.Globalization
Imports System.Reflection.Emit
Imports System.Runtime.Remoting.Channels
Imports System.Security.Cryptography.X509Certificates
Module Module1   
    Sub Main()
        'BitArray
        Dim bit1 As BitArray = New BitArray(8)
        Dim z() As Byte = {60}
        bit1 = New BitArray(z)
        Dim bi As Integer
        For bi = 0 To bit1.Count - 1
            Console.Write("{0} ", bit1(bi))
        Next bi
        Console.WriteLine()
        Dim intArray(0) As Integer
        bit1.CopyTo(intArray, 0)
        Console.WriteLine("The bit1 value is: {0}", intArray(0))

        Dim bit2 As BitArray = New BitArray(8)
        Dim z2() As Byte = {13}
        bit2 = New BitArray(z2)
        For bi = 0 To bit2.Count - 1
            Console.Write($"{bit2(bi)} ")
        Next bi
        Console.WriteLine()
        Dim intArray2(0) As Integer
        bit2.CopyTo(intArray2, 0)
        Console.WriteLine("The bit2 value is: {0}", intArray2(0))

        Dim bit3 As BitArray = New BitArray(8)
        bit3 = bit1.And(bit2)
        Console.WriteLine($"bit3 length: {bit3.Length}")
        For bi = 0 To bit3.Count - 1
            Console.Write($"{bit3(bi)} ")
        Next bi
        Console.WriteLine()
        Dim intArray3(0) As Integer
        bit3.CopyTo(intArray3, 0)
        Console.WriteLine($"The bit3 (And) value is {intArray3(0)}")


        Dim bit4 As BitArray = New BitArray(8)
        bit4 = bit1.Or(bit2)
        For bi = 0 To bit4.Count - 1
            Console.Write($"{bit4(bi)} ")
        Next bi
        Console.WriteLine()
        Dim intArray4(0) As Integer
        bit4.CopyTo(intArray4, 0)
        Console.WriteLine($"The bit4 (Or) value is {intArray4(0)}")

        Console.ReadLine()
    End Sub

End Module

作为doc状态

The current BitArray object will be modified to store the result of the bitwise AND operation.

所以 bit3 作为 bit1bit2 的结果的正确方法是将 bit1 值克隆到 bit3,然后调用And bit3

方法
Dim bit3 As BitArray = bit1.Clone()
bit3.And(bit2)

同样处理 bit4

Dim bit4 As BitArray = bit1.Clone()
bit4.Or(bit2)

无关,但

Dim bit1 As BitArray = New BitArray(8)

是多余的,您将立即使用

丢弃该数组
bit1 = New BitArray(z)

所以你实际上可以写它

Dim bit1 As BitArray = New BitArray(z)

作为 BitArray 的替代品,

    Dim z As Byte
    Dim z1 As Byte = 60
    Dim z2 As Byte = 13
    z = z1 And z2
    z = z1 Or z2
    z = z1 Xor z2

Bitwise operations