Как прочитать один бит в массиве байтов?

Проблема в том, что у меня есть массив байтов с 200 индексами, и я просто хочу проверить, что четвертый бит MyArray[75] равен нулю (0) или единице (1).

byte[] MyArray; //with 200 elements

//check the fourth BIT of  MyArray[75]

person mammadalius    schedule 10.08.2009    source источник
comment
Что вы имеете в виду под четвертым битом? Бит 3 или бит 4?   -  person Nosredna    schedule 10.08.2009


Ответы (3)


Четвертый бит в элементе 75?

if((MyArray[75] & 8) > 0) // bit is on
else // bit is off

Оператор & позволяет использовать значение в качестве маски.

xxxxxxxx = ?
00001000 = 8 &
----------------
0000?000 = 0 | 8

Вы можете использовать этот метод для сбора любых битовых значений, используя тот же метод.

1   = 00000001
2   = 00000010
4   = 00000100
8   = 00001000
16  = 00010000
32  = 00100000
64  = 01000000
128 = 10000000
person Spencer Ruport    schedule 10.08.2009
comment
На самом деле 8 будет 3-м битом - person Henk Holterman; 10.08.2009
comment
бит 3 — четвертый бит :) (бит 0 — первый бит) - person Sedat Kapanoglu; 10.08.2009
comment
Ну, это все зависит от того, что он имеет в виду под четвертым битом, не так ли? :-) - person Nosredna; 10.08.2009
comment
@ssg, тогда какой нулевой бит? - person Nosredna; 10.08.2009
comment
Да, мой плохой (-: отредактировал и свой ответ. - person Henk Holterman; 10.08.2009
comment
Нет, 8 — это четвертый бит от младшего значащего конца. Или пятый, если хотите считать с самого значимого конца. - person Jason Williams; 10.08.2009
comment
Учитывая, что он задает этот вопрос, вполне можно предположить, что он не использует термин «нулевой бит». В любом случае, я думаю, у него будет достаточно информации, чтобы найти ответ на свой вопрос. ;) - person Spencer Ruport; 10.08.2009
comment
Это действительно трудно сказать. Когда он выясняет, какой бит в каком байте искать, он вполне может найти бит 0. Это просто показывает вам, как нечеткий вопрос может испортить вам день. - person Nosredna; 10.08.2009
comment
Я боюсь, что все общество может расколоться на маленькие и большие байты, споря о том, действительно ли существует нулевой бит :) - person Sedat Kapanoglu; 11.08.2009

Что-то типа:

if ( (MyArray[75] & (1 << 3)) != 0)
{
   // it was a 1
}

Предполагая, что вы имели в виду 4-й бит справа.

И вы можете проверить System.Collections.BitArray, просто чтобы убедиться, что вы не изобретаете велосипед.

person Henk Holterman    schedule 10.08.2009
comment
Или, может быть, 1‹‹3, в зависимости от того, что он имел в виду под 4-м битом. - person Nosredna; 10.08.2009

person    schedule
comment
Вы продолжаете использовать этот оператор ^. Я не думаю, что это означает то, что вы думаете. - person Tyler McHenry; 10.08.2009
comment
^ является побитовым исключающим или не имеет силы - person pjp; 10.08.2009
comment
Я думаю, что Тайлер имеет в виду, что вы можете искать оператор 1 << (pos-1) для позиций с индексом 1 или оператор 1 << pos для позиций с индексом 0. - person maxwellb; 10.08.2009
comment
Я сделал замену mpbloch и отменил голосование против. Танк, кажется, здесь новенький, поэтому я решил взять на себя смелость. - person Nosredna; 10.08.2009