ищет побитовую операцию c # для bitarray - PullRequest
0 голосов
/ 13 августа 2011

Я пытаюсь выполнить побитовую операцию над BitArray, которая привела бы к:

1010
0011
= 1000

Таким образом, всякий раз, когда первый бит установлен и соответствующий бит не установлен (1-0), он возвращает 1. Все остальные сценарии (0-0,1-1,0-1) приводят к 0.

Как мне этого добиться, с побитовой операцией или без нее?

Производительность имеет решающее значение.

Ответы [ 2 ]

3 голосов
/ 13 августа 2011

Если производительность критична, вы можете рассмотреть возможность вообще не использовать BitArray с учетом памяти и производительности , а вместо этого использовать BitVector32 или выполнять операции непосредственно с нижележащими байтами:

 byte a = 0x3a;     // 0011 0101
 byte b = 0xa3;     // 1010 0011
 byte r = a & (~b); // 0001 0100

Если вы считаете, что производительность BitArray соответствует вашим потребностям, тогда нет необходимости преждевременной оптимизации;однако, если вы считаете, что производительность не подходит, вы можете рассмотреть возможность замены BitArray.

3 голосов
/ 13 августа 2011

Это должно работать:

Предположим, что ba1 - ваш первый BitArray, а ba2 - ваш второй.

ba1.And (ba2.Not ())

должен оставить ba1 в состоянии, которое вы ищете в O (2N) времени. (но оба ваших BitArrays будут изменены - потребуется больше работы и времени, если вам нужно сохранить исходные BitArrays, сделав их копии).

...