1. 程式人生 > >筆試面試7 如何判斷一個系統的儲存方式是大端還是小端

筆試面試7 如何判斷一個系統的儲存方式是大端還是小端

首先看下大小端的概念吧,我老是會有點亂...

來自百度百科的解釋:

大端模式,是指資料的高位儲存在記憶體的低地址中,而資料的低位儲存在記憶體的高地址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理:地址由小向大增加,而資料從高位往低位放; 小端模式,是指資料的高位儲存在記憶體的高地址中,而資料的低位儲存在記憶體的低地址中,這種儲存模式將地址的高低和資料位權有效地結合起來,高地址部分權值高,低地址部分權值低,和我們的邏輯方法一致。

簡單來說,從記憶體地址增加的方向來說,大端就是先存放高序位元組,小端就是先存放低序位元組。

例如:0x0102

-------->記憶體增加的方向------>

地址A------>地址A+1

大端:01   02

小端:02     01

判斷方法是利用union的一個特性,那就是裡面的變數共享一段記憶體

可以定義一個union.

union  Test{

short num;//2byte

char c[sizeof(num)];//2byte

} ;

然後存入一個0x0102或者其他數字到test.num中,因為共享記憶體的原因,可以訪問c[1],c[2],檢視裡面的值來判斷大小端。

一個實現是(參照unix網路程式設計中的一個例子):

#include <stdio.h>
#include <conio.h>
union Test{
	  short num;
	  char c[sizeof(short)];
};
int main()
{
 	union Test t;//C++ 直接宣告為Test t即可 
    t.num=0x0102;
	if(t.c[0]==1&&t.c[1]==2)
		printf("大端!\n");
	else if(t.c[0]==2&&t.c[1]==1) 	 	
		printf("小端!\n");	
	else
		printf("未知!\n");
	getch(); 
	return 0;
	 
}
在Win7 32bit裡面用DEV c++執行的結果為:



或者更簡單的是存一個short值,然後取其地址。

#include <stdio.h>
#include <conio.h>
int main()
{
 	short int num=0x0201;
 	char *p=#
 	
	if(*p==0x02)
		printf("大端!\n");
	else if(*p==0x01) 	 	
		printf("小端!\n");	
	else
		printf("未知!\n");
	getch(); 
	return 0;
	 
}
測試結果:



——————————————————————————————————————————————————————————————————

//寫的錯誤或者不好的地方請多多指導,可以在下面留言或者點選左上方郵件地址給我發郵件,指出我的錯誤以及不足,以便我修改,更好的分享給大家,謝謝。

轉載請註明出處:http://blog.csdn.net/qq844352155

author:天下無雙

Email:[email protected]

2014-11-6

於GDUT

——————————————————————————————————————————————————————————————————


相關推薦

筆試面試7 如何判斷一個系統儲存方式大端還是

首先看下大小端的概念吧,我老是會有點亂... 來自百度百科的解釋: 大端模式,是指資料的高位儲存在記憶體的低地址中,而資料的低位儲存在記憶體的高地址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理:地址由小向大增加,而資料從高位往低位放; 小端模式,是指資料的高位

2.7 判斷一個連結串列是否為迴文結構

【題目】:   給定一個連結串列的頭結點head,請判斷該連結串列是否為迴文結構   例如:   1 --> 2 --> 1, 返回true   1 --> 2 --> 2 --> 1, 返回true   15 --> 6 --> 15, 返回true  

(ES6的“...“配合ES5‘’forEach‘’)前端面試判斷一個字串中出現次數最多的字元,統計這個次數

// 判斷一個字串中出現次數最多的字元,統計這個次數 let str = 'aasdadddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddsdasjjhsghkafsagjkg

常用系統儲存方式對比分析(DAS、SAN、NAS)

今天和朋友們吃飯,順便談到了儲存的型別,發現大家好像都非常的瞭解,那我不瞭解,感覺很不爽,於是乎,以我的性格,那必須要準備整理一篇文章,來共同學習下吧! 用一個excle來描述相關的內容,看起來能直白些 有人說這個不好看,那我只能盜圖嘍!~~ 來,開始進行

一個C程式判斷系統是32或64位、大端位元組序

一、判斷系統是32位或64位32位處理器一次只能處理32位,也就是4個位元組的資料,虛擬地址空間的最大值是4G。64位處理器一次能處理64位,也就是8個位元組的資料,虛擬地址空間的最大值是16T。32位

判斷系統大端還是的兩種方法

stream bsp == ace all fun 如果 cnblogs tdi #include <iostream> #include <stdio.h> #include <malloc.h> #include <strin

判斷一個區間中比某個數的數的個數

題目如下: 給定一個序列,有多次詢問,每次查詢區間裡小於等於某個數的元素的個數 即對於詢問 (l,r,x),你需要輸出  的值 其中 [exp] 是一個函式,它返回 1 當且僅當 exp 成立,其中 exp 表示某個表示式 這個題可以使用兩種方法來解決: 樹狀陣列:由

C語言——判斷儲存型別是大端還是

判斷當前機器的位元組序。 思路:存1,取出第一個位元組的內容:                                                         若為小端,則為 01  00  00  00 …    ;低地址為1              

用程式設計來判斷系統大端還是

大端是高位位元組先儲存(高地址) 小端是地位位元組先儲存(低地址) 網路位元組序是大端的,也就是高位位元組先傳輸 下面是程式: #include <stdio.h> int main() { union ut{ shor

深入理解計算機系統-之-數值儲存(一)-CPU大端模式詳解

大端與小端 在嵌入式開發中,大端(Big-endian)和小端(Little-endian)是一個很重要的概念。 MSB與LSB 最高有效位(MSB)指二進位制中最高值的位元。在16位元的數字音訊中,其第1個位元便對16bit的字的數值有最大的

判斷計算機是大端還是

ima png code imageview ret return 技術 urn 地址 1. 大端:高位存在低地址,低位存在高地址 比如 :0x12345678 2. 小端:高位存在高地址,低位存在低地址 3. 判斷計算機是大端還是小端,代碼如下所示: #include

如果判斷機器是大端還是

() nbsp 多個 brush cpp namespace space big 內存地址 大端:高位字節存放在低位地址,低位字節存放在高位地址 小端:高位字節存放在高位地址,低位字節存放在低位地址 #include<iostream> using names

如何判斷CPU是大端還是模式

一、概念及詳解 在各種體系的計算機中通常採用的位元組儲存機制主要有兩種: Big-Endian和Little-Endian,即大端模式和小端模式。 Big-Endian和Little-Endian的定義如下: 1) Little-Endian:就是低位位元組排放在記憶體的低地

測試我自己的系統大端還是

結果證明:是小端儲存。 #include <iostream> #include <vector> #include <stack> using namespace std; int checkCPU() { union w {

檢查系統大端還是模式

在計算機系統中,規定:每個地址單元都會對應一個位元組(8個bit),但是,在c語言中,除了有一個位元組(8個bit)的char,也有兩個位元組(16個bit)的short,也有四個位元組(32個bit)的long(在不同的編譯器下可能不同)。對於16位或者32位的處理器,即

[筆試題] 如何判斷主機是大端還是(位元組序)

        今天看《linux程式設計》中關於跨平臺需要注意的事項,看到了大端小端的問題。突然想起實驗室一同學的筆試題,如何判斷主機的大端還是小端。         所謂大端就是指高位值在記憶體中放低位地址,所謂小端是指低位值在記憶體中放低位地址。比如0x1234567

大端判斷及轉換

當前的儲存器,多以byte為訪問的最小單元,當一個邏輯上的地址必須分割為物理上的若干單元時就存在了先放誰後放誰的問題,於是端(endian)的問題應運而生了,對於不同的儲存方法,就有大端(big-endian)和小端(little- endian)兩個描述。 位元組排序按分

C#一個簡單辦法判斷操作系統版本

message art 微軟 tin dem pac sna string win 做個記錄,最近寫個小軟件,涉及到判斷操作系統版本的,查看了微軟的相關資料,感覺以及網上的一些Demo,感覺不全,而且有些系統也不好區分。 因為之前寫過批處理版本的操作系統判斷使用了WMIC的

找工作筆試面試那些事兒(7)---測試題答案

一、請填寫BOOL  , float,  指標變數  與“零值”比較的 if  語句。  提示:這裡“零值”可以是0 ,  0.0 , 

27-集合--Set及其子類(HashSet+LinkedHashSet+TreeSet)+二叉樹+Comparable+Comparator+雜湊表+HashSet儲存自定義物件+判斷元素唯一的方式

一、Set 1、Set:元素不可以重複,是無序的(存入和取出的順序不一致) 2、Set介面中的方法和Collection中的方法一致 3、Set集合的元素取出方式只有一種:迭代器iterator() Set set = new HashSet(); I