Номер C # для BitMask32 для значений - PullRequest
1 голос
/ 25 апреля 2011

Я получаю число, например 513. Мне нужно преобразовать это число в битовую маску32, а затем мне нужно посчитать, где каждый 1 бит находится в массиве

Например 513 = 0 и 9

Как бы я мог преобразовать число в бит 32 и затем прочитать значения?

Сейчас я просто конвертирую число в строковое двоичное значение:

string bit = Convert.ToString(513, 2);

Был бы более эффективный способ сделать это? Как бы я преобразовал значение в битовый массив?

Спасибо

Ответы [ 4 ]

2 голосов
/ 25 апреля 2011
var val = 513;
for(var pos=0;;pos++)
{
    var x = 1 << pos;
    if(x > val) break;
    if((val & x) == x)
    {
        Console.WriteLine(pos);
    }
}
1 голос
/ 25 апреля 2011
using System.Collections;

int originalInt = 7;
byte[] bytes = BitConverter.GetBytes(originalInt);
BitArray bits = new BitArray(bytes);
int ndx = 9; //or whatever ndx you actually care about

if (bits[ndx] == true)
{
     Console.WriteLine("Bit at index {0} is on!", ndx);
}
1 голос
/ 25 апреля 2011

Класс BitVector32 - это служебный класс, который может помочь вам в этом, если вы действительно хотите сохранить битовую карту.

0 голосов
/ 25 апреля 2011

Для проверки бита #i в номере n:

if ((n & (1 << i)) != 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...