2013-04-24 6 views
1

Есть ли математическое выражение для бит-операции ИЛИ с использованием основных операторов, таких как *, +, - и /? Примером того, что я ищу, будет (для смен)) n<<a, превращающийся в n*Math.pow(2,a).Математическое уравнение для побитовой операции ИЛИ?

+1

умножение на 2? –

+0

Ответ: Не совсем, нет. –

ответ

1

может предложить алгоритмическое решение

public static void main(String[] args) throws Exception { 
    byte a = 0x14; 
    byte b = 0x1; 
    int c = or(a, b); 
    System.out.println(Integer.toHexString(c)); 
} 

static int or(byte a, byte b) { 
    int c = 0; 
    for (int i = 0; i < 8; i++) { 
     if (bit(a, i) != 0 || bit(b, i) != 0) { 
      c += Math.pow(2, i); 
     } 
    } 
    return c; 
} 

static int bit(int x, int i) { 
    return x/(int) Math.pow(2, i) % 2; 
} 

оно может быть преобразовано в выражение одной строкой, но это было бы слишком долго

int c = (a % 2 != 0 ? 1 : b % 2 !=0 ? 1 : 0) + (a % 4/2 != 0 ? 2 : b % 4/2 !=0 ? 2 : 0) ... 

это то, как он вычисляет биты

int a0 = a % 2; 
int a1 = a % 4/2; 
int a2 = a % 8/4; 
int a3 = a % 16/8; 
int a4 = a % 32/16; 
...