问题描述
我正在学习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
作为bit1
和bit2
的结果的正确方法是将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)
,
作为BitArray的替代方案,
[object Promise]