大端存储和小端存储(大端存储和小端存储)

ntechnologytr778 2024-01-16 阅读:10 评论:0
大家好,今天给大家分享大端存储和小端存储,一起来看看吧。前64个bit为:OFFSET SIZE TYPE DESCRIPTION VALUE0 4 (object header) 01 5f...

大家好,今天给大家分享大端存储和小端存储,一起来看看吧。

前64个bit为:

OFFSET SIZE TYPE DESCRIPTION VALUE0 4 (object header) 01 5f 9f df (00000001 01011111 10011111 11011111) (-543203583)4 4 (object header) 7a 00 00 00 (01111010 00000000 00000000 00000000) (122)

按照上面说的前25位为预留位,那么这64位应该是从后往前,即:

25位预留位:0 00000000 00000000 0000000031位hashcode:01011111 10011111 11011111 01111010 (最后一位补0)1位预留位:04位GC分代年龄:00001位偏向锁位:02位锁标志位:01

从输出能看到,monkey对象的hashcode为:2061475679,转化为二进制为:

1111010110111111001111101011111, 和 31位hashcode:01011111 10011111 11011111 01111010 根本不相等。

这里就需要用到文章开头说的大端存储还是小端存储了。

大端存储:数据的高字节存储在低地址中,数据的低字节存储在高地址中

怎么理解这句话呢。看看下面这个例子:

以java语言为例,int型数据占用4个字节。如int型x=5,二进制表现形式为:00000000 00000000 00000000 00001111以16进制表示为:0X0 0X0 0X0 0Xf再来看上面那句话:数据的高字节存储在低地址中,数据的低字节存储在高地址中。则大端存储int x = 5; 在内存中的分布为:0Xf 0X0 0X0 0X0 (0X0相对于0Xf属于数据的高字节,高字节存储在低地址中)

小端存储:数据的高字节存储在高地址中,数据的低字节存储在低地址中

还是看上面的例子:

以java语言为例,int型数据占用4个字节。如int型x=5,二进制表现形式为:00000000 00000000 00000000 00001111以16进制表示为:0X0 0X0 0X0 0Xf0X0相对于0Xf属于高字节。高字节存储在高地址中,则x在内存中的分布为:0X0 0X0 0X0 0Xf

接下来我们首先假设jvm使用的是大端存储:

01011111 10011111 11011111 01111010 转成16进制为:0X5f 0X9f 0Xdf 0X7a

如果是大端存储,正确的顺序应该是:0X7a 0Xdf 0X9f 0X5f ,转换成十进制为:2061475679等于输出的数据。

再假设jvm使用的是小端存储,则正确的顺序为0X5f 0X9f 0Xdf 0X7a,转成十进制为:1604312954,不等于输出数据。

因此我们可以知道jvm使用的是大端存储。即:高字节存储在低地址,低字节存储在高地址。

以上就是大端存储和小端存储的内容分享,希望对大家有用。

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权发表,未经许可,不得转载。

«    2024年3月    »
123
45678910
11121314151617
18192021222324
25262728293031
最近发布
热门文章