位数组(BitArray,BitVector32)

BitVector32结构效率高,位数不可变

BitArray效率低,位数可以变

========================================BitArray

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            //BitArray --- 位数组
            //And,Or,Xor  两个BitArray对象的长度要相同
            BitArray ba1 = new BitArray(8);//11110000
            BitArray ba2 = new BitArray(8);//00000000
            ba1.SetAll(true);//设置数组类所有的值为true
            ba1.Set(4, false);//设置索引位置4处为true
            ba1.Set(5, false);
            ba1.Set(6, false);
            ba1.Set(7, false);
            //ba1.And(ba2);//逻辑与(&&) 结果:00000000
            //ba1.Or(ba2);//逻辑或(||) 结果:11110000
            ba1.Xor(ba2);//异或(^) 结果:111110000
            DisplayBit(ba1);
        }

        static void DisplayBit(BitArray b)
        {
            Console.WriteLine("数组长度:" + b.Count);
            foreach (bool item in b)
            {
                Console.Write(item ? 1 : 0);
            }
            Console.ReadKey();
        }

    }
}

========================================BitVector32

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.Specialized;
namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
 
            
            //----------------使用掩码和索引器访问矢量中的位
            BitVector32 bv = new BitVector32();//初始化32位的位(默认为0)
            int bit1 = BitVector32.CreateMask();//值:1   位数:1
            int bit2 = BitVector32.CreateMask(bit1);//值:2   位数:2
            int bit3 = BitVector32.CreateMask(bit2);//值:4   位数:3
            int bit4 = BitVector32.CreateMask(bit3);//值:8   位数:4
            int bit5 = BitVector32.CreateMask(bit4);//值:16  位数:5
            int bit6 = BitVector32.CreateMask(bit5);//值:32  位数:6
            int bit7 = BitVector32.CreateMask(bit6);//值:64  位数:7
            bv[bit7] = true;//设置第7位置位数为1
            Console.WriteLine(bv.Data);//输出int值
            Console.WriteLine(bv);//输出位数组
           
            //---------------位数组片段化
            BitVector32 bv2 = new BitVector32(0x79abcdef);
            BitVector32.Section section1 = BitVector32.CreateSection(0xfff);//12位
            BitVector32.Section section2 = BitVector32.CreateSection(0xff, section1);//接着 8位
            BitVector32.Section section3 = BitVector32.CreateSection(0xff, section2);//接着 8位
            BitVector32.Section section4 = BitVector32.CreateSection(0xf, section3);//接着 4位
            Console.WriteLine(bv2);//0111 10011010 10111100 110111101111
            Console.WriteLine(Convert.ToString(bv2[section1], 2));//110111101111
            Console.WriteLine(Convert.ToString(bv2[section2], 2));//10111100
            Console.WriteLine(Convert.ToString(bv2[section3], 2));//10011010
            Console.WriteLine(Convert.ToString(bv2[section4], 2));//111
            Console.ReadKey();

        }
    }
}
时间: 2024-12-17 23:16:52

位数组(BitArray,BitVector32)的相关文章

C#编程(维数组)----------位数组

位数组 如果需要处理很多位,就可以使用BitArray类和BitVector32.BitArray位于命名空间System.Collections中. BitVector32位于命名空间System.Collections.Speciallized. BitArray类 类BitArray是一个引用引用类型,包含一个int数组,没32位使用一个新整数.和bool类型的数组bool[]差不多 案例: using System; using System.Collections; using Sys

C#高级编程五十七天----位数组

位数组 如果需要处理很多位,就可以使用BitArray类和BitVector32.BitArray位于命名空间System.Collections中. BitVector32位于命名空间System.Collections.Speciallized. BitArray类 类BitArray是一个引用引用类型,包含一个int数组,没32位使用一个新整数.和bool类型的数组bool[]差不多 案例: using System; using System.Collections; using Sys

位数组

#define BITMASK(b) (1 << ((b) % CHAR_BIT))  第b位在数组[index]的值#define BITSLOT(b) ((b) / CHAR_BIT)  第b位在数组中下标 #define BITSET(a, b) ((a)[BITSLOT(b)] |= BITMASK(b))   设置某一位 #define BITCLEAR(a, b) ((a)[BITSLOT(b)] &= ~BITMASK(b)) 清除某一位数据#define BITTEST

C++ 出现bug :二位数组的操作运算,求非对角线的元素的和

编写一个通用程序,求出二位数组(行数和列数必须相等)的非对角线的元素之和,试建立类MATRIX完成上述功能 #include<iostream> using namespace std; class MATRIX { public: void mATRIX(); void MATRIX_sum(); void MATRIX_display(); static int fact_len;//定义静态变量 private: int sum; int a[40][40]; }; int MATRIX

java 数据结构 图中使用的一些常用算法 图的存储结构 邻接矩阵:图的邻接矩阵存储方式是用两个数组来标示图。一个一位数组存储图顶点的信息,一个二维数组(称为邻接矩阵)存储图中边或者弧的信息。 设图G有n个顶点,则邻接矩阵是一个n*n的方阵,定义为: 实例如下,左图是一个无向图。右图是邻接矩阵表示:

以下内容主要来自大话数据结构之中,部分内容参考互联网中其他前辈的博客. 图的定义 图是由顶点的有穷非空集合和顶点之间边的集合组成,通过表示为G(V,E),其中,G标示一个图,V是图G中顶点的集合,E是图G中边的集合. 无边图:若顶点Vi到Vj之间的边没有方向,则称这条边为无项边(Edge),用序偶对(Vi,Vj)标示. 对于下图无向图G1来说,G1=(V1, {E1}),其中顶点集合V1={A,B,C,D}:边集合E1={(A,B),(B,C),(C,D),(D,A),(A,C)}: 有向图:若

Javascript 数组自定义排序,并获取排序后的保存原索引的同位数组(堆排序实现)

比如数组A: [ 0: 5, 1: 2, 2: 4, 3: 3, 4: 1 ] 排序后的结果为:[1, 2, 3, 4, 5],但是有时候会有需求想要保留排序前的位置到一个同位数组里,如前例则为:[4, 1, 3, 2, 0],因此就利用堆排序写了一个单独的数组排序过程加以实现. 代码如下: function arrayKeys(arr) { var i = 0, len = arr.length, keys = []; while (i < len) { keys.push(i++); } r

在控制台输入字母然后在控制台打印相应的二位数组字母,要求一行打印

1 package MyHomeWork; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 import java.util.Scanner; 6 7 /** 8 * Created by zhouyubin on 7/11/14. 9 */ 10 public class Test2 { 11 private static final char[][] print_a={{' ',' ',' ','A',' ',' ',' ','

二位数组环状最大子矩阵

由于上次二位数组,使用了函数,所以这次只要修改函数就可以了. //Powered by lzr! #include<iostream> using namespace std; int yiwei_max(int n,int a[]) { int temp=0,sum=-999999999; int j=0,k=0,i; for(i=0;i<n;i++) { if(temp>0) { temp+=a[i]; } else { temp=a[i]; if(a[i]>0 &

直观理解C语言中指向一位数组与二维数组的指针

一维数组和指针: 对于一位数组和指针是很好理解的: 一维数组名: 对于这样的一维数组:int a[5];  a作为数组名就是我们数组的首地址, a是一个地址常量 . 首先说说常量和变量的关系, 对于变量来说, 用箱子去比喻再好不过了, 声明一个变量就声明一个箱子,比如我们开辟出一个苹果类型的箱子, 给这个变量赋值就是把盛放苹果的箱子中放入一个实实在在的苹果, 这就是变量的赋值.  而对于数组来说, 就是一组类型相同的箱子中,一组苹果箱子, 可以放入不同的苹果. 一维数组空间: 变量被声明后, 我