国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

提題來見(1)

2019-11-08 18:40:40
字體:
來源:轉載
供稿:網友

x86,有下列程序

#include <stdio.h>#include <windows.h>int main(){	union 	{		short k;		char i[2];	}*s,a;	s = &a;	s->i[0] = 0x39;	s->i[1] = 0x38;	PRintf("%x/n",a.k);	system("pause");	return 0;}

輸出的結果是()

A.3839    B.3938    C.380039     D.不確定

 

這道題是在考我們對大小端字節序的知識。

首先我們來認識一下字節序,顧名思義字節的順序,也就是大于一個字節類型的數據在內存中的存放順序。

 

那么字節序分為兩類:Big-Endian和Little-Endian。

引用標準的Big-Endian和Little-Endian的定義如下:

a) Little-Endian就是低位字節排放在內存的低地址端,高位字節排放在內存的高地址端。

b) Big-Endian就是高位字節排放在內存的低地址端,低位字節排放在內存的高地址端。

c) 網絡字節序:4個字節的32 bit值以下面的次序傳輸:首先是0~7bit,其次8~15bit,然后16~23bit,最后是24~31bit。這種傳輸次序稱作大端字節序。由于 TCP/ip首部中所有的二進制整數在網絡中傳輸時都要求以這種次序,因此它又稱作網絡字節序。

 

比如,以太網頭部中2字節的“以太網幀類型”,表示后面數據的類型。對于ARP請求或應答的以太

網幀類型來說,在網絡傳輸時,發送的順序是0x08,0x06。在內存中的映像如下圖所示:該字段的值為0x0806。按照大端方式存放在內存中。

---------------------------------------------------------------------------------------

我們來看看C程序中內存空間布局情況:

以上圖為例 如果我們在棧上分配一個unsigned char buf[4],那么這個數組變量在棧上是如何布的?

現在我們對于高低地址有了認識,那么高低字節又是怎么回事呢?

假如我們把上面的buf[4](正好四個字節)合起來看成一個32位無符號整型0x12345678,這樣的話,高位是0x12還是 0x78 ? 低位呢? 我們來回想一下我們接觸最多的十進制數,靠左邊的是高位,靠右邊的低位。 當然啦,其他進制也是這樣的。我們來回到上面的問題,0x12345678,高位到低位的字節依次是0x12 0x34 0x56  0x78.

 

我們再來回顧一下Big-Endian和Little-Endian的定義 ,并用圖示來說明這兩種字節序:

就用剛才的unsigned int value = 0x12345678為例,用unsignedchar buf[4]來表示value:

在現有的平臺上Inter的x86采用的是Little-Endian,Sun的SPARC采用的是Big-Endian。

    終于回到了我們這道題上,x86下低地址存放低位:

所以選A。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 甘肃省| 开阳县| 武功县| 闽侯县| 大埔区| 梓潼县| 丹巴县| 荆门市| 垣曲县| 金坛市| 平顺县| 惠安县| 电白县| 安康市| 深水埗区| 丰县| 根河市| 武平县| 武强县| 东明县| 乾安县| 邓州市| 乐昌市| 安徽省| 桓台县| 准格尔旗| 兰坪| 虎林市| 墨玉县| 泉州市| 象山县| 蒙山县| 华宁县| 乐昌市| 包头市| 三穗县| 筠连县| 隆安县| 金溪县| 广丰县| 衡山县|