0

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

有 4 个位数组:bit1、bit2、bit3 和 bit4 bit1 的值为 60 bit2 的值为 13 bit3 = bit1 And(bit2) bit4 = bit1 Or(b​​it2) 每个 Array 的字节显示是正确的 - 但是,当使用 CopyTo要将 BitArray 转换为 Integer Array,bit4 在应该为 61 时返回值 13。如果注释掉 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
4

2 回答 2

2

作为文档状态

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

bit3因此,作为bit1AND结果的正确方法bit2是将值克隆bit1bit3,然后只需调用该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)
于 2020-09-18T11:16:42.027 回答
1

作为 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

位运算

于 2020-09-18T13:14:01.627 回答