Java 整数到二进制的混淆

标签 java bit

根据我的理解,Java中的Integer类型是32位有符号的,最高有效位是有符号位。这就是为什么 Integer.MAX_VALUE2147483647,即:

1111111111111111111111111111111(1 repeated in 31 times).

所以我认为它实际上可以表示为:

01111111111111111111111111111111(a 0 followed by 1 repeated 31 times)

0 表示这是一个正整数。

然后对于以下代码:

    int test = -2147483647;
    String converted = Integer.toBinaryString(test);
    System.out.println(converted);

输出为:

 10000000000000000000000000000001

为什么输出是这样的?对我来说,二进制流应该表示为 -1,因为最高有效位是 1 表示负数。

像这样:

    int minusOne = -1;
    String converted1 = Integer.toBinaryString(test);
    System.out.println(converted1);

输出与上面相同:

10000000000000000000000000000001

有什么解释吗?

最佳答案

看下面两个片段,你发现问题了吗:

int test = -2147483647;
String converted = Integer.toBinaryString(test);
System.out.println(converted);

int minusOne = -1;
String converted1 = Integer.toBinaryString(test);
System.out.println(converted1);

您正在打印相同的变量测试,这就是输出相同的原因。如果你打印出“minusOne”,它将全是 1。

10000000000000000000000000000001 -> -2147483647 = Integer.MIN_VALUE + 1
11111111111111111111111111111111 -> -1

1111111111111111111111111111111  -> Integer.MAX_VALUE = 2147483647
10000000000000000000000000000000 -> Integer.MAX_VALUE + 1
10000000000000000000000000000000 -> Integer.MIN_VALUE = -2147483648
10000000000000000000000000000001 -> Integer.MIN_VALUE + 1

关于Java 整数到二进制的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28922872/

相关文章:

java - 在eclipse中将项目转换为maven后的目录结构

java - 同步邻居

arrays - 按位移位以及此解决方案为何有效

c - 如何在 C 中正确地重新分配一个位数组

java - 从二进制数据中提取特定位

java - 附加Excel值

java - 如何在 Java 8 流中使用 if-else 逻辑 forEach 和另一个列表

java - 数组列表到对象[][]

mysql - Laravel 4.2 BIT 数据类型问题

c - 分组中的单独字节