91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

判斷機器的大小端模式

發布時間:2020-07-29 11:58:45 來源:網絡 閱讀:1101 作者:PlayWithYou 欄目:編程語言

大小端模式:

大端模式,是指數據的高字節保存在內存的低地址中,而數據的低字節保存在內存的高地址中,這樣的存儲模式有點兒類似于把數據當作字符串順序處理:地址由小向大增加,而數據從高位往低位放;這和我們的閱讀習慣一致。

小端模式,是指數據的高字節保存在內存的高地址中,而數據的低字節保存在內存的低地址中,這種存儲模式將地址的高低和數據位權有效地結合起來,高地址部分權值高,低地址部分權值低。

下面以unsigned int value = 0x12345678為例,分別看看在兩種字節序下其存儲情況,我們可以用unsigned char buf[4]來表示value

Big-Endian: 低地址存放高位,如下:

高地址
  ---------------
  buf[3] (0x78) -- 低位
  buf[2] (0x56)
  buf[1] (0x34)
  buf[0] (0x12) -- 高位
  ---------------
  低地址

Little-Endian: 低地址存放低位,如下:

高地址
  ---------------
  buf[3] (0x12) -- 高位
  buf[2] (0x34)
  buf[1] (0x56)
  buf[0] (0x78) -- 低位
  --------------

低地址

內存地址小端模式存放內容大端模式存放內容
0x40000x780x12
0x40010x560x34
0x40020x340x56
0x40030x120x78


下面我們來看一下測試代碼:

#include<stdlib.h>
#include<stdio.h>
int8_t isBigEndian()
{
    union
    {
        int  i;
        char  c;
    }test;
/*
 *storage methods
 *little endian: 10000000
 *big endian:    00000010
 */
    test.i = 2; //0x00000010
    printf("test i addr:%x\t test c addr:%x\n",&test.i,&test.c);
    printf("test i:%x\tlength:%d\t test c:%x\t length:%d\n",test.i,sizeof(test.i),test.c,sizeof(test.c));
    return  test.c != test.i;
}
void main()
{
  printf("%x\n",isBigEndian());
}

運行結果如下:

test i addr:d4f20b80     test c addr:test i addr:d4f20b80     test c addr:d4f20b80
test i:2    length:4     test c:2     length:1
0

從結果中可以看出,成員c和i是低字節對齊的,并且他兩的值都是2,但他們的長度卻不一樣,說明i的低字節存儲在i的首地址中,也就是按照低字節的方式存儲的,即小端模式.返回0.同理如果返回1,則說明他們是按照高字節的方式存儲,返回1,即大端模式.


如果需要,我們可以通過自定義宏對大小端進行轉換,如下:

#definesw16(x)\
 ((short)(\
 (((short)(x)&(short)0x00ffU)<<8)|\
 (((short)(x)&(short)0xff00U)>>8)))

大小端目前的現狀

    目前Intel的80x86系列芯片是唯一還在堅持使用小端的芯片,ARM芯片默認采用小端,但可以切換為大端;而MIPS等芯片要么采用全部大端的方式 儲存,要么提供選項支持大端——可以在大小端之間切換。另外,對于大小端的處理也和編譯器的實現有關,在C語言中,默認是小端(但在一些對于單片機的實現 中卻是基于大端,比如Keil 51C),Java是平臺無關的,默認是大端。在網絡上傳輸數據普遍采用的都是大端。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

莆田市| 小金县| 兴仁县| 太康县| 邳州市| 克东县| 肇东市| 东丽区| 平乡县| 库尔勒市| 宜川县| 赣州市| 弥勒县| 元氏县| 桓台县| 邯郸县| 芜湖市| 万山特区| 台江县| 昌江| 喀什市| 宣化县| 北宁市| 乌兰察布市| 龙门县| 资中县| 滨海县| 三门县| 乐清市| 岚皋县| 德保县| 颍上县| 卓尼县| 滕州市| 房山区| 柳江县| 辉县市| 米脂县| 太和县| 安陆市| 镇沅|