天天看點

判斷目前機器的位元組序:大/小端存儲模式

大小端

大端(存儲)模式:是指資料的低位儲存在記憶體的高位址中,而資料的高位,儲存在記憶體的低位址中;

小端(存儲)模式:是指資料的低位儲存在記憶體的低位址中,而資料的高位, ,儲存在記憶體的高位址中。

計算機中的有符号數有三種表示方法,即原碼、反碼和補碼。三種表示方法均有符号位和數值位兩部分,符号位都是用0表示“正”,用1表示“負”。正數的原、反、補碼都相同,負數三種表示方法各不相同。

原碼(負數):直接将二進制按照正負數的形式翻譯成二進制

反碼(負數):将原碼的符号位不變,其他位依次按位取反

補碼(負數):反碼+1就得到補碼

判斷目前機器的位元組序:大/小端存儲模式

a和b在記憶體中的存儲(小端存儲):

判斷目前機器的位元組序:大/小端存儲模式

我們知道計算機中存儲的變量的補碼,雖然資料在記憶體中存儲分大小端模式。但訪取資料時都是從地位址中開始通路。是以當我們對int類型的變量強轉為char類型時獲得的隻是&a裡面低位址的第一個位元組的内容([注]計算機為int類型變量配置設定4個位元組的空間,為char類型變量配置設定1個位元組的空間),根據*(char *)&1結果結果推斷目前機器的位元組序。

判斷目前機器的位元組序:大/小端存儲模式

完整代碼

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdbool.h>

bool CheckModel()
{
	int i = 1;
	return (*(char *)&i) == 1;
}

int main()
{
	int flag = CheckModel();
	if (flag)
	{
		printf("小端存儲模式\n");
	}
	else
	{
		printf("大端存儲模式\n");
	}
	system("pause");
	return 0;
}
           

繼續閱讀