1

我想知道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 指令。

4

1 回答 1

4

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

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

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

所以,你的问题的答案

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

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

于 2018-04-25T09:47:40.423 回答