java內存,大端小端判斷


一,簡介
在計算機系統中,規定:每個地址單元都會對應一個字節(8個bit),但是,在c語言中,
除了有一個字節(8個bit)的char,也有兩個字節(16個bit)的short,
也有四個字節(32個bit)的long(在不同的編譯器下可能不同)。對於16位或者32位的處理器,
即就是大於8位的處理器,由於寄存器的寬度大於一個字節,
那么就存在如何將一個多字節的變量的數據如何存放的問題——所以,就有了大小端之分。

大端模式:是指數據的高字節保存在內存的低地址中,而數據的低字節保存在內存的高地址端。

小端模式,是指數據的高字節保存在內存的高地址中,低位字節保存在在內存的低地址端。
優勢,劣勢:
小端模式 :強制轉換數據不需要調整字節內容,1、2、4字節的存儲方式一樣。
大端模式 :符號位的判定固定為第一個字節,容易判斷正負。

二,java判斷大端小端示例:
long a = UNSAFE.allocateMemory(8);
        try {
            UNSAFE.putLong(a, 0x0102030405060708L);
            //存放此long類型數據,實際存放占8個字節,01,02,03,04,05,06,07,08
            byte b = UNSAFE.getByte(a);
            //通過getByte方法獲取剛才存放的long,取第一個字節
            //如果是大端,long類型順序存放—》01,02,03,04,05,06,07,08  ,取第一位便是0x01
            //如果是小端,long類型順序存放—》08,07,06,05,04,03,02,01  ,取第一位便是0x08
            switch (b) {
                case 0x01:
                    ByteOrder byteOrder = ByteOrder.BIG_ENDIAN;
                    break;
                case 0x08:
                    byteOrder = ByteOrder.LITTLE_ENDIAN;
                    break;
                default:
                    assert false;
                    byteOrder = null;
            }
        }catch (Exception e){

        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM