我有以下if情况.
if (i == -i && i != 0)
Run Code Online (Sandbox Code Playgroud)
在Java中,这个条件i会返回什么值true?
我无法想到在Java 中i考虑两个补码表示法的任何这样的价值.
我还希望得到这种情况的任何答案的代数证明(在Java的上下文中)?
class A {
static final int i;
static {
i = 128;
Thread t = new Thread() {
public void run() {
System.out.println("i=" + i);
}
};
t.start();
try {
t.join();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
public class MainTesting {
public static void main(String[] args) {
A a = new A();
System.out.println("finish");
}
}
Run Code Online (Sandbox Code Playgroud)
我永远不会得到finish印刷和我的价值.为什么会这样?
public int add(int a, int b){
while (b != 0){
int carry = (a & b) ;
a = a ^ b;
b = carry << 1;
}
return a;
}
Run Code Online (Sandbox Code Playgroud)
这是使用按位运算计算两个整数之和的代码.
如果我手动/编程计算,我看它适用于每个整数.但我无法弄清楚a和的中间值之间的任何关系carry.为什么进位乘以2指定b?
PS:我在这里找到了一个答案 Bitwise Multiply和Add in Java 但这是用于乘法而不是用于加法.