我正在调试一个问题,我从字符串的二进制表示创建了一个字节数组,如下所示。
int year = getInt(input, "Please enter a two-digit year", i -> (i>=10 && i<=99));
我可能在这里遗漏了一些东西。因此请求您的指导。
答案 0 :(得分:4)
似乎存在一种非常普遍的误解。
在某种意义上,所有数据以“二进制形式”存储。特别是,整数数值,如byte
,short
,int
等,内部都以二进制形式存储。此内部表示称为Two's complement form。
(对于浮点数,表示有点复杂:它是IEEE 754表示 - 仍然是以二进制形式存储) < / p>
可能导致您的问题的关键问题是:当您只是打印一个数字,或将它们转换为字符串时,
System.out.println(someByte);
或
String s = String.valueOf(someByte);
然后默认情况下,打印小数表。主要是因为这是人类最“自然”和最易阅读的形式。
您可以将字节传递给Integer.html#toBinaryString
以创建其二进制表示的字符串表示形式:
System.out.println(Integer.toBinaryString(someByte));
答案 1 :(得分:2)
好吧,JVM就像任何程序一样,不会将数值存储为“十进制”或“十六进制”。它只是内存中的一种模式。您的调试器显示十进制格式的值。这只是为了方便起见,因为大多数人更喜欢十进制到二进制格式以便于阅读。对于计算机本身,它只是一个8位长的位串,存储为二进制值。
答案 2 :(得分:1)
- 在调试数组时只是为了查看它是如何存储的,我可以看到它们在内部存储为小数。那是为什么?
醇>
您看到字节值以十进制显示。调试器未显示内部值。
- 当它被解释为字节码时,我假设它将被转换为二进制。那么为什么不首先以二进制形式存储。
醇>
以存储在二进制文件中。