当前位置: 首页 > 面试题库 >

Java中负整数的二进制表示

王凯旋
2023-03-14
问题内容

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

例如,我们有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

谢谢


问题答案:

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

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

0000...00000101

反转可为您提供:

1111...11111010

然后加一个给出:

1111...11111011


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

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



 类似资料:
  • 问题内容: 我想使用二进制补码表示一位负整数。使用标准的Python位表示实用程序并没有多大帮助: 的补码形式为。我该怎么做呢? 问题答案: Python的整数已经使用二进制补码,但是由于它们具有任意精度,因此负数的二进制表示形式在开始时将具有一个无限的1s字符串,就像正数具有一个无限的0s字符串一样。由于显然无法显示,因此用负号代替。 如果您想要特定宽度的二进制表示形式,则可以使用模数。

  • 问题内容: 我知道用和 将小数转换为二进制(在这里我取32位结果的低16位)。 我想做的是另一种方法,并采用16位二进制补码二进制字符串并将其转换为十进制。 即 而不是 我该怎么做? 问题答案: 您需要将结果读取到中。 此打印。

  • 我在c编程方面是个新手,我正试图弄清楚更多关于位的知识,二进制E.c.T 例如,我有三个二进制int变量m1=255或11111111;m2=255或11111111(二进制),m3=255或11111111(二进制),m4=0或00000000(二进制)。我试图把所有的主题放在一起到单一的int变量temp。类似于(11111111 11111111 1111111100000000)这里是我的

  • 问题内容: 我有一个二进制数组,我想将其转换为整数列表,其中每个int是该数组的一行。 例如: 我想转换成。 问题答案: 我曾经在这里问过类似的问题。这是我的回答,适合您的问题:

  • 问题内容: 我有一个数字,我想以二进制形式打印。我不想通过编写算法来做到这一点,Java中是否有任何内置函数? 问题答案: 假设你的意思是“内置”: 请参阅整数文档。 (Long具有类似的方法,具有可在其中指定基数的实例方法。)

  • 问题内容: 例如,对于输出可以是(16位): 我试过了 它为左填充留出空间: 如何将s用作填充。我在Formatter中找不到它。还有另一种方法吗? PS 这篇文章描述了如何使用左0填充来格式化整数,但不适用于二进制表示形式。 问题答案: 我认为这是次佳的解决方案,但是你可以