1. 程式人生 > >大端、小端問題

大端、小端問題

大端、小端問題

1.大小端概念

大端:將資料的地位,放到記憶體的高地址處;

小端:將資料的地位,放到記憶體的地地址處;

在計算機中,記憶體是儲存容量以位元組為基本單位的;

資料是用 二進位制為基本單位的

2.資料在記憶體中的地址

我們拿一個整形舉例,一個整形,在32位平臺下佔4個位元組,但是取地址時,我們通常認為數值最小的那個地址是這個整形的地址。

3.如何驗證

//方法一;
int check_sys()
{
	int i = 1;
	return (*(char*)&i);
}
int main()
{
	int ret = check_sys
(); if (ret == 1) printf("小端\n"); else printf("大端\n"); return 0; }
  int i=1  //以32 位為例, 整形在記憶體中佔4個位元組,以補碼形式儲存

        0x1              0x2             0x3             0x4       ——>計算機中記憶體的增長 (模擬)

  0000 0001 0000 0000 0000 0000 0000 0000 ——>小端

  0000 0000 0000 0000 0000 0000 0000 0001 ——>大端

char型別佔1個位元組

  如果是小端,在(char*)強轉時擷取低地址處1個位元組,解引用返回是1
; 反之是 0,則說明是大端;
//方法二
int check_sys()
{
	union X
{
	int i;
	char j;

}x;
    x.i=1;
    return x.j;
}
int main()
{
	int ret = check_sys();
	if (ret == 1)
		printf("小端\n");
	
	else
		printf("大端\n");
	return 0;
}
方法二在原理上與方法一樣,在實現形式上有所不同;
聯合體裡面的成員變數共用一塊空間;
返回 x.j時,擷取低地址處;