首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >-1除以2如何得到-1?(按位运算>>)

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

Stack Overflow用户
提问于 2020-05-07 20:48:33
回答 1查看 71关注 0票数 1

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

我期望返回0。

就像你把1或-1除以2一样,小数部分被去掉了,我们得到的是零。这可能与二的补码有关,但这只是一种猜测,我并不完全理解。

有人能解释一下吗?

-1 \f25 >> 1= -1

-1 /2=0

代码语言:javascript
复制
 public class JavaFiddle
  {
    public static void main(String[] args)
    {
      System.out.println(-1 >> 1);
      System.out.println(-1 / 2);
    }
  }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-07 21:06:24

java中的负数使用一种称为2's complement的符号来表示。如果我们假设有符号整数的大小是8。你可以这样想2的补码。

代码语言:javascript
复制
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个字节)

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

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

代码语言:javascript
复制
11111111 >> 1 = 11111111

这是因为负数除以2和右移的Non-equivalence of arithmetic right shift and division含义并不是在所有情况下都相等

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61658253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档