繁体   English   中英

-1 除以 2 如何得到 -1? (按位运算>>)

[英]How can -1 divided by 2 result in -1? (bitwise operation >>)

我很惊讶地看到 -1 除以 2 使用按位运算结果 -1。

我期待 0 被返回。

就像将 1 或 -1 除以 2 时,小数部分被删除,我们得到零。 这可能与二的补码有关,但这只是我不完全理解的猜测和猜测。

有人可以解释一下吗?

-1 >> 1 = -1

-1 / 2 = 0

 public class JavaFiddle
  {
    public static void main(String[] args)
    {
      System.out.println(-1 >> 1);
      System.out.println(-1 / 2);
    }
  }

java 中的负数使用称为2 的补码的符号表示。 如果我们假设签名的 integer 的大小是 8。你可以这样想 2 的补码

2 will be  00000010
1 will be  00000001
0 will be  00000000
-1 will be 11111111 (Count in reverse from max)
-2 will be 11111110
-3 will be 11111101

(实际上在 java 中int的大小是 4 个字节)

>>这是有符号的按位右移运算符。 根据文档,它在最左边的 position 上为正数填充 0,对于负数,它将用 1 填充相同的 position。

这意味着将 -1 移动任意次数只给出 -1。

11111111 >> 1 = 11111111

这是因为负数除以 2 的算术右移和除法含义的不等价性,并且在所有情况下都不应将右移视为相等

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM