【问题标题】:How java handles the results of bitwise operatorsjava如何处理位运算符的结果
【发布时间】:2018-04-25 09:38:09
【问题描述】:

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

【问题讨论】:

  • 他没有解释任何与 -ve 数字相关的事情..
  • @AnandChoudhary 链接:7) Integral types in Java (int, long, short and byte) are signed numbers in Java where most significant bit (MSB) represent sign of number. 1 will denote a negative number and 0 as MSB will denote a positive numbers
  • -5 的二进制表示是11111111111111111111111111111011 而不是1011

标签: java bitwise-operators bitwise-and bitwise-or


【解决方案1】:

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

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

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

那么,你的问题的答案

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 2014-08-22
    • 2011-02-06
    • 1970-01-01
    • 2012-04-07
    相关资源
    最近更新 更多