java 如何处理按位运算符的结果

How java handles the results of bitwise operators

我想知道 java 如何找到按位运算的结果是 -ve 或 +ve?

int x=-5;
int y=8;
System.out.println(x&y); //8
System.out.println(x|y); //-5

x->1 0 1 1 (2's complement)
y->1 0 0 0 
x & y -> 1 0 0 0 ->8
x | y -> 1 0 1 1 ->-5(2's complement) 

java 如何知道 1 0 1 1 是 -5 ?

为什么不直接把o/p写成1 0 1 1的十进制等值11?

是否对每个结果应用 2 的补码?

我看过汇编代码。是 IAND 和 IOR 指令。

您是 运行 32 位整数的按位运算符。所以,数字“8”前面确实有很多零,而“-5”前面有很多:

8  -> 0...01000
-5 -> 1...11011

因此,Java 不需要 "know" 关于位运算的结果或操作数的任何信息。 “8”是一个以 0 开头的 32 位数字,因此它是正数。 “-5”是以“1”开头的32位数字,所以是负数。

所以,你的问题的答案

Does it apply 2's complement on every result ?

是:是的,因为在 Java 中所有整数都是有符号数,使用 2 的补码。