ГЛАВНАЯ     АРХИВ     НАПИСАТЬ АДМИНУ     ПОДПИСАТЬСЯ НА RSS     ВОЙТИ      

Поиск

Категории

Облако тегов

  << Предыдущий пост       Следующий пост >>  
От: inbruk
4. ноября 2010 00:57

Рассмотрим какие возможности по работе с битами предлагает C#. В этом посте рассмотрим коллекции битов, потенциально любой длины.В пространстве имен System.Collections есть класс BitArray, который содержит в себе компактный битовый массив и позволяет выполнять операции как над битами, так и над такими массивами. Объект класса BitArray может расти почти до бесконечности, если это требуется, но существует предел использования памяти и производительности при работе с экземпляром класса.BitArray имеет следующие возможности (более подробно см.MSDN):

1) инициализация из массивов булевских значений, байтов или значениз Int32, инициализация по размеру и с заполнением значением по умолчанию.

2) позволяет считывать/устанавливать значения каждого из битов, также заполнять все или избранные биты заданным значением

3) позволяет выполнять над объектами типа BitArray следующие операции: And, Or, Xor, Not, Equals

4) также, что не мало важно, умеет печатать себя во вполне читабельном виде

Пример создания BitArray:


using System;
using System.Collections;

class Program
{
static void Main()
{
bool[] array = new bool[5];
array[0] = true;
array[1] = false;
array[2] = true;
array[3] = false;
array[4] = true;

BitArray bitArray = new BitArray(array);
foreach (bool bit in bitArray)
Console.WriteLine(bit);

Console.ReadKey();
}
}


Пример установки битов и подсчет количества установленных в 1 битов:

using System;
using System.Collections;

class Program
{
static void Main()
{
BitArray bitArray = new BitArray(32);

bitArray[3] = true;
bitArray[5] = true;
bitArray.Set(10, true);

Console.WriteLine("--- Total bits ---");
Console.WriteLine(bitArray.Count);

Console.WriteLine("--- Total bits set to 1 ---");
Console.WriteLine(CountBitArray(bitArray));
}

static int CountBitArray(BitArray bitArray)
{
int count = 0;
foreach (bool bit in bitArray)
{
if (bit)
{
count++;
}
}
return count;
}
}


Пример побитовых операций:

using System;
using System.Collections;
public class SamplesBitArray
{

public static void Main()
{
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;

Console.WriteLine("Initial values");
Console.Write("myBA1:");
PrintValues(myBA1, 8); Console.Write("myBA2:");
PrintValues(myBA2, 8);
Console.WriteLine();

Console.WriteLine("Result");
Console.Write("XOR:");
PrintValues(myBA1.Xor(myBA2), 8);
Console.WriteLine();

Console.WriteLine("After XOR");
Console.Write("myBA1:");
PrintValues(myBA1, 8);
Console.Write("myBA2:");
PrintValues(myBA2, 8);
Console.WriteLine();

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.Xor(myBA3);
}
catch (Exception myException)
{
Console.WriteLine("Exception: " + myException.ToString());
}

Console.ReadKey(true);
}

public static void PrintValues(IEnumerable myList, int myWidth)
{
int i = myWidth;
foreach (Object obj in myList)
{
if (i <= 0)
{
i = myWidth;
Console.WriteLine();
}
i--;
Console.Write("{0,8}", obj);
}
Console.WriteLine();
}
}


И на последок: побитоввые сдвиги в типе явно не реализованы, так как BitArray более пригоден для набивания битами некоего битового потока или действий над одинаковыми многобитовыми значениями. Как, например, происходит в архиваторах или некоторых алгоритмах шифрования.


Вы хотите научиться зарабатывать деньги в интернете, а также показать всем свои творческие способности? Так в чем же дело? Учитесь создавать сайты на wordpress и зарабатывайте!

Kirov Portal- информационный развлекательный интернет портал города Кирова.

Похожие записи


Вопросы на собеседовании C#, Net, ASP.NET, SQL
Продолжая тему вопросов на собеседовании. Нашел еще одну подборку. Оригинал лежит здесь . Перенес, чтобы не затерялось. Есть вполне вменяемые ответы (хотя, на некоторые вопросы ответил бы по-другому). Ответы находятся после списка вопросов, я их не менял. 23. Что такое шаблон проектирования Model/View/Controller? Как и зачем его применяют? 2...

Способы заработка на сайте
На этом блоге было много постов про производство и раскрутку сайтов. Но пока не было про заработок на них. Пора исправить этот недочет. Здесь будут описаны по возможности не фантастичные, и не супер низко прибыльные способы. Также упор будет сделан именно на организацию процесса, а не технических деталях, которых в обилии в интернете. Несмотря на то, что как пр...

Silverlight, HTML5 и непрозрачная стратегия развития Microsoft
Оригинал статьи взят отсюда: Silverlight, HTML5 и непрозрачная стратегия развития Microsoft Автор: Peter Bright Переводчик: Mairon     По непонятным мне на данный момент причинам, похоже, что многие разработчики, присутствовавшие на недавней конференции PDC-2010 (Крупнейшая конференция Microsoft для разработчиков — Прим. переводчика), были сильн...

Комментарии

 
nobelwerfer 29.07.2011 18:06:15 #

дааа, наследие дельфи дает о себе знать

Добавить комментарий




biuquote
  • Комментарий
  • Предпросмотр
Loading


  Сохранить комментарий