【问题标题】:Mathematical equation for OR bitwise operation?OR位运算的数学方程?
【发布时间】:2013-04-24 00:44:51
【问题描述】:

是否有使用基本运算符(如*+-/)进行按位或运算的数学表达式?我正在寻找的一个例子(对于轮班)是 n<<a 变成 n*Math.pow(2,a)

【问题讨论】:

  • 乘以 2 ?
  • 答:不是,不是。

标签: java math bit-manipulation bitwise-operators bitwise-or


【解决方案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;
...

【讨论】:

    猜你喜欢
    • 2011-11-04
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多