побитовое ИЛИ (в массиве)

java bit-manipulation

1299 просмотра

2 ответа

Мне нужно выполнить побитовое ИЛИ двух массивов байтов в Java. Как я могу это сделать?

byte a= new byte[256];
byte b= new byte[256];

byte c; /*it should contain information i.e bitwise OR of a and b */
Автор: user2260503 Источник Размещён: 12.11.2019 09:53

Ответы (2)


2 плюса

Это так просто, как с помощью | оператор и цикл:

public static byte[] byteOr(byte[] a, byte[] b) {
    int len = Math.min(a.length, b.length);
    byte[] result = new byte[len];
    for (int i=0; i<len; ++i)
        result[i] = (byte) (a[i] | b[i])
    return result;
}
Автор: Durandal Размещён: 05.06.2013 10:46

1 плюс

Я думаю, что вам лучше всего использовать BitSet. Этот класс уже имеет void or(BitSet bs)метод для использования.

byte a = new byte[256];
byte b = new byte[256];
byte c = new byte[256];
BitSet bsa = new BitSet();
BitSet bsa = new BitSet();
//fill BitSets with values from your byte-Arrays
for(int i = 0; i < a.length * 8; i++)
    if((a[i/8] & (1 << 7-i%8)) != 0)
        bsa.set(i);
for(int i = 0; i < a.length * 8; i++)
    if((b[i/8] & (1 << 7-i%8)) != 0)
        bsb.set(i);
//perform OR
bsa.or(bsb);
//write bsa to byte-Array c
for(int i = 0, byte h; i < a.length; i++){
    h = 0;
    for(int j = 7; j >= 0; j++){
        if(bsa.get(i*8 + 7 - j))
           h = h | (1 << j);
    }
    c[i] = h;
}
Автор: johk95 Размещён: 05.06.2013 07:53
Вопросы из категории :
32x32