为什么double总是8个字节而int总是4个字节,即使int有更多数字?

Dic*_*cas 0 java double int byte

我不明白int 63823是如何占用更少的空间而不是双1.0.在这个特定的实例中,是否没有更多信息存储在int中?

jas*_*son 7

我不明白int 63823是如何占用更少的空间而不是双1.0.在这个特定的实例中,是否没有更多信息存储在int中?

好问题.当您看到63823并且1.0是基础数据的表示时,您看到的是您没有看到基础数据.它是专门格式化,以便可以读取它,但它是不是该怎么机器看到它.

Java使用非常特殊的格式来表示intdouble.你需要看看那些表示理解为什么63823当被表示为Java采用32位int1.0当作为一个Java表示采用64位double.

特别是,intJava中的63823 表示为:

00000000000000001111100101001111
Run Code Online (Sandbox Code Playgroud)

和1.0作为double表示在Java中作为:

0011111111110000000000000000000000000000000000000000000000000000
Run Code Online (Sandbox Code Playgroud)

如果你想探索更多,我推荐Two's Complement每个计算机科学家应该知道的关于浮点运算的内容.