繁体   English   中英

为什么Java中的字节表示形式以十进制存储数据?

[英]Why does byte representation in Java store data in decimal?

我正在调试一个问题,其中我从字符串的二进制表示形式创建了一个字节数组,如下所示。

  1. 在调试数组以查看其存储方式时,我可以看到它们在内部以小数形式存储。 这是为什么?
  2. 当我将其解释为字节码时,我假设它将被转换为二进制。 那么为什么不首先存储二进制文件呢?
 String[] binArray = {"10101","11100","11010","00101"};
    byte[]bytes = new byte[binArray.length];
    for (int i=0; i< binArray.length;i++){
        bytes[i] = Byte.parseByte(binArray[i],2);
}

我可能在这里错过了一些东西。 因此,请您提供指导。

似乎有一个非常普遍的误解。

从某种意义上说, 所有数据都以“二进制形式”存储。 特别是,整数数值,如byteshortint等,在内部全部以二进制形式存储。 这种内部表示称为二进制补码形式

(对于浮点数,表示有点复杂:它是IEEE 754表示-仍然以二进制形式存储

可能导致您提出问题的关键问题是:当您仅打印数字或将其转换为字符串时,

System.out.println(someByte);

要么

String s = String.valueOf(someByte);

然后默认情况下,将打印十进制格式。 主要是因为这是人类最“自然”且最易读的形式。

您可以将字节传递给Integer.html#toBinaryString以创建其二进制表示形式的字符串表示形式:

System.out.println(Integer.toBinaryString(someByte));

嗯,就像任何程序一样,JVM都不将数字值存储为“十进制”或“十六进制”。 这只是内存中的位模式。 调试器以十进制格式 显示值。 这只是为了方便起见,因为大多数人都倾向于使用十进制而不是二进制格式来提高可读性。 对于计算机本身,它只是8位长度的位字符串,存储为二进制值。

  1. 在调试数组以查看其存储方式时,我可以看到它们在内部以小数形式存储。 这是为什么?

您会看到以十进制显示的字节值。 调试器未显示内部值。

  1. 当我将其解释为字节码时,我假设它将被转换为二进制。 那么为什么不首先存储二进制文件呢?

它以二进制形式存储。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM