VB.Net中的BitArray.And方法

问题描述

我正在学习VB.Net,并遇到以下代码意外的结果-在Visual Studio中运行它:

有4个BitArray:bit1,bit2,bit3和bit4 bit1的值为60 bit2的值为13 位3 =位1 And(位2) bit4 = bit1或(bit2) 每个数组的字节显示正确无误-但是,当使用copyTo将BitArray转换为整数数组时,bit4返回值为13(应为61)。如果注释掉bit3部分,则bit4返回正确的值为61。如果更改bit3 = bit1 Xor(bit2)而不是“ And”,则bit4还会返回正确的值-我不确定我在这里缺少什么..... 感谢您的帮助! 这是代码

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状态

当前的BitArray对象将被修改以存储按位AND运算的结果。

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

上的1}}方法
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)
,

作为BitArray的替代方案,

[object Promise]

Bitwise operations