大端和小端

内存地址是连续有序的。计算机存储数据与内存寻址是以字节为单位的。

当存储byte类型时,需要一个字节的内存,存储与读取无异议。

但当存储char(java 使用uniconde编码,1个字符占两个字节)、short,int等类型,需要多个字节内存空间,怎么存储呢?低位置的第一个字节,是存储数据的低位(小端模式),还是存储数据的高位(大端模式)呢。

例如一个16bit的short型,值为0x1122那么0x11为数据的高位,0x22为数据的低位。其在内存中的地址为0x0010(即占用0x0010,0x0011两个字节),对于大端模式,就将0x11(数据高位)放在低地址中,即0x0010中,0x22(数据低位)放在高地址中,即0x0011中。小端模式,刚好相反。

如果把内存看作是从右向左的,地址依次增大;数据左边为高位,右边为低位,也是从右向左依次增大,如果存储顺序一致,则是小端;相反,则是大端。

public class _01_判断大端小端 {
    public static void main(String[] args) {

        if (ByteOrder.nativeOrder() == ByteOrder.BIG_ENDIAN) {
            System.out.println("BIG_ENDIAN");
        } else {
            System.out.println("LITTLE_ENDIAN");
        }

        //误解:
        int i = 1;
        byte b = (byte)i;// 并不能判断大小端,因为向下的类型转换时,保留的是a值的低字节部分,而不是内存中数据的低地址字节部分
        System.out.println(b);
        if(b == 1)
            System.out.println("LITTLE_ENDIAN");
        else
            System.out.println("BIG_ENDIAN");

        System.out.println(i&0xff);
    }
}

 

转载于:https://my.oschina.net/u/1537182/blog/661240

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值