它跟VFP的BITAND作用相符吗?
前后比较的BitArray是不是长度要一样

解决方案 »

  1.   

    数值类型是变量如何转为BitArray
      

  2.   

    BitArray ba=new BitArray(...);
    不过注意它的数据顺序
      

  3.   

    broadury(marvel):
    没错是这样定义,但是如果是int类型的变量如何转为BitArray
      

  4.   

    例如:
    int ti=1000;
    那如何实现ti和1111的按位 AND 运算
      

  5.   

    MSDN上这样说:
    对当前 BitArray 中的元素和指定的 BitArray 中的相应元素执行按位 AND 运算。如果两个操作数均为 true,则按位 AND 运算返回 true;如果一个或两个操作数为 false,则按位 AND 运算返回 false。下列示例说明如何将 AND 应用于两个 BitArray 实例。[Visual Basic] 
    Imports System
    Imports System.Collections
    Imports Microsoft.VisualBasicPublic Class SamplesBitArray    
        
        Public Shared Sub Main()
            
            ' Creates and initializes two BitArrays of the same size.
            Dim myBA1 As New BitArray(4)
            Dim myBA2 As New BitArray(4)
            myBA1(1) = False
            myBA1(0) = False
            myBA1(3) = True
            myBA1(2) = True
            myBA2(2) = False
            myBA2(0) = False
            myBA2(3) = True
            myBA2(1) = True
            
            ' Performs a bitwise AND operation between BitArray instances of the same size.
            Console.WriteLine("Initial values")
            Console.Write("myBA1:")
            PrintValues(myBA1, 8)
            Console.Write("myBA2:")
            PrintValues(myBA2, 8)
            Console.WriteLine()
            
            Console.WriteLine("Result")
            Console.Write("AND:")
            PrintValues(myBA1.And(myBA2), 8)
            Console.WriteLine()
            
            Console.WriteLine("After AND")
            Console.Write("myBA1:")
            PrintValues(myBA1, 8)
            Console.Write("myBA2:")
            PrintValues(myBA2, 8)
            Console.WriteLine()
            
            ' Performing AND between BitArray instances of different sizes returns an exception.
            Try
                Dim myBA3 As New BitArray(8)
                myBA3(0) = False
                myBA3(1) = False
                myBA3(2) = False
                myBA3(3) = False
                myBA3(4) = True
                myBA3(5) = True
                myBA3(6) = True
                myBA3(7) = True
                myBA1.And(myBA3)
            Catch myException As Exception
                Console.WriteLine("Exception: " + myException.ToString())
            End Try
        End Sub
        
        Public Shared Sub PrintValues(myList As IEnumerable, myWidth As Integer)
            Dim myEnumerator As System.Collections.IEnumerator = _
               myList.GetEnumerator()
            Dim i As Integer = myWidth
            While myEnumerator.MoveNext()
                If i <= 0 Then
                    i = myWidth
                    Console.WriteLine()
                End If
                i -= 1
                Console.Write(ControlChars.Tab + "{0}", myEnumerator.Current)
            End While
            Console.WriteLine()
        End Sub
    End Class' This code produces the following output.

    ' Initial values
    ' myBA1:    False    False    True    True
    ' myBA2:    False    True    False    True

    ' Result
    ' AND:    False    False    False    True

    ' After AND
    ' myBA1:    False    False    False    True
    ' myBA2:    False    True    False    True

    ' Exception: System.ArgumentException: Array lengths must be the same.
    '    at System.Collections.BitArray.And(BitArray value) in <UnknownName>:line 
    '    at SamplesBitArray.Main()[C#] 
    using System;
    using System.Collections;
    public class SamplesBitArray  {   public static void Main()  {      // Creates and initializes two BitArrays of the same size.
          BitArray myBA1 = new BitArray( 4 );
          BitArray myBA2 = new BitArray( 4 );
          myBA1[0] = myBA1[1] = false;
          myBA1[2] = myBA1[3] = true;
          myBA2[0] = myBA2[2] = false;
          myBA2[1] = myBA2[3] = true;      // Performs a bitwise AND operation between BitArray instances of the same size.
          Console.WriteLine( "Initial values" );
          Console.Write( "myBA1:" );
          PrintValues( myBA1, 8 );
          Console.Write( "myBA2:" );
          PrintValues( myBA2, 8 );
          Console.WriteLine();      Console.WriteLine( "Result" );
          Console.Write( "AND:" );
          PrintValues( myBA1.And( myBA2 ), 8 );
          Console.WriteLine();      Console.WriteLine( "After AND" );
          Console.Write( "myBA1:" );
          PrintValues( myBA1, 8 );
          Console.Write( "myBA2:" );
          PrintValues( myBA2, 8 );
          Console.WriteLine();      // Performing AND between BitArray instances of different sizes returns an exception.
          try  {
             BitArray myBA3 = new BitArray( 8 );
             myBA3[0] = myBA3[1] = myBA3[2] = myBA3[3] = false;
             myBA3[4] = myBA3[5] = myBA3[6] = myBA3[7] = true;
             myBA1.And( myBA3 );
          } catch ( Exception myException )  {
             Console.WriteLine("Exception: " + myException.ToString());
          }
       }
       public static void PrintValues( IEnumerable myList, int myWidth )  {
          System.Collections.IEnumerator myEnumerator = myList.GetEnumerator();
          int i = myWidth;
          while ( myEnumerator.MoveNext() )  {
             if ( i <= 0 )  {
                i = myWidth;
                Console.WriteLine();
             }
             i--;
             Console.Write( "\t{0}", myEnumerator.Current );
          }
          Console.WriteLine();
       }
    }
    /* 
    This code produces the following output.Initial values
    myBA1:    False    False    True    True
    myBA2:    False    True    False    TrueResult
    AND:    False    False    False    TrueAfter AND
    myBA1:    False    False    False    True
    myBA2:    False    True    False    TrueException: System.ArgumentException: Array lengths must be the same.
       at System.Collections.BitArray.And(BitArray value) in <UnknownName>:line 0
       at SamplesBitArray.Main()
      

  6.   

    现在有一个问题
    如何是字符串"12"转为二进制的字符串"1010"
    是这样吗
    byte[] aa=Encoding.Unicode.GetBytes("12");
    但是如何把aa是byte[]类阿
    string bb=Encoding.Unicode.GetString(aa);
    bb有变回"12"了,我想要的是"1010"
      

  7.   

    首先说明一下,12转为二进指的字符串为“1100”,10转为二进指才是1010
    如果你要转的是数字的话比较简单的。
    下面是2中实现的方法,我已经测试通过了
    try
    {
    /*(1)
    int a=Convert.ToInt16(this.textBox1.Text.Trim());
    string aStr = Convert.ToString(a,2);
    MessageBox.Show(s);
    */
    (2)
    int a = Convert.ToInt16(this.textBox1.Text.Trim());
    string aStr = string.Empty;
    while( a!=0 )
    {
    if( a%2 == 0 )
    aStr = "0"+aStr;
    else
    aStr = "1"+aStr;
    a /= 2;}
    MessageBox.Show(aStr);
    }
    catch
    {}
      

  8.   

    其实我就像要这样的效果,在c#中如何实现该功能(通过3,6的二进制数位与比较得到2)x = 3  && 0011 binary
    y = 6  && 0110 binary? BITAND(x,y) && Returns 2, 0010 binary
      

  9.   

    byte a=Convert.ToByte("0011",2);
    byte b=Convert.ToByte("0110",2);
    byte c=(byte)(a&b);
    MessageBox.Show(c.ToString());
    这样返回的结果就是2