Java中负整数的二进制表示

发布于 2021-01-30 22:45:38

请帮我了解负整数的二进制表示形式。

例如,我们有5。5的二进制表示是00000000.00000000.00000000.00000101

而且据我了解,-5的二进制表示应该像10000000.00000000.00000000.00000101

但是输出是11111111.11111111.11111111.11111011

我有2个问题:

1)为什么这里有这么1多位。

2)我真正无法理解的是最后3位011。看起来像3。即使是+1或-1这将是100010

谢谢

关注者
0
被浏览
90
1 个回答
  • 面试哥
    面试哥 2021-01-30
    为面试而生,有面试问题,就找面试哥。

    您对这些负数应该是什么样的理解是有缺陷的。Java对负数使用二进制补码,而基本规则是取正数,将所有位取反然后加1。那给你带来负面影响。

    因此,正如您所说的,五个是:

    0000...00000101
    

    反转可为您提供:

    1111...11111010
    

    然后加一个给出:

    1111...11111011
    


    显示的位模式-5称为符号/幅度,您只需翻转最左边的位就可以取反数字。在C实现中,这是三种可能性(a)之一,但Java仅使用二进制补码(对于其负整数)。


    (a)但是请记住,C和C ++当前都在努力删除其他两种编码类型,并且只允许二进制补码。



推荐阅读
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看