我曾经认为每个内存位置包含 8、16、32 或 64 位。所以 0101 将作为 00000101 存储在 8 位机器中(如果它是负数,则符号扩展)。这一切都很好而且很花哨,直到我出于好奇用 java 编写了一个程序来了解这个系统的更多内部工作原理。
有问题的方法如下所示:
public void printBinaryRep(File f){
try{
FileInputStream inputStream = new FileInputStream(f);
int next = 0;
byte b = 0;
while((next = inputStream.read()) != -1){
b = (byte)next;
System.out.println((char)next + " : "+Integer.toBinaryString(next));
}
inputStream.close();
}
catch(Exception e){System.out.println(e);}
}
我从一个说 Hello World 的文件中得到了这个输出
H : 1001000
e : 1100101
l : 1101100
l : 1101100
o : 1101111
: 100000
W : 1010111
o : 1101111
r : 1110010
l : 1101100
d : 1100100
除了空间,一切看起来都很好。它有 6 位而不是 8 位。我现在想知道所有这些信息是如何存储在内存中的。如果所有这些都存储在 8 位块中,例如
您好:10010001100101110110011011001101111
然后您可以简单地查看每个 8 位块并找出它所代表的数字(以及它所指的 ASCII 代码)。当不同大小的字符(如 6 位空间和 4 位 /n )与它们一起存储时,它是如何工作的?那么在大的位空间中存储一个小数不会浪费很多位吗?
我想我的一些基本理解是错误的(或者程序可能在某个地方出错了......)。对不起,如果这个问题听起来很奇怪或太不必要的深入。我只是想知道。我已经做了一些谷歌搜索,但它没有提出任何相关的信息。如果你能让我知道我哪里出了问题或指出我正确的方向,我将不胜感激。谢谢!