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 的补码。
我想知道 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 的补码。