天天看點

你是真的“C”——【經典面試知識點】資料在記憶體中的大小端存儲方式前言🙌大小端介紹🙌經典的面試題目🙌總結撒花💞

你是真的“C”——【經典面試知識點】資料在記憶體中的大小端存儲方式😎

  • 前言🙌
  • 大小端介紹🙌
    • 什麼大端小端呢?:
      • 大小端存儲的标準定義:
      • 大端和小端存在的意義
  • 經典的面試題目🙌
  • 總結撒花💞
你是真的“C”——【經典面試知識點】資料在記憶體中的大小端存儲方式前言🙌大小端介紹🙌經典的面試題目🙌總結撒花💞

   

😎部落格昵稱:部落格小夢

😊最喜歡的座右銘:全神貫注的上吧!!!

😊作者簡介:一名熱愛C/C++,算法等技術、喜愛運動、熱愛K歌、敢于追夢的小部落客!

😘部落客小留言:哈喽!😄各位CSDN的uu們,我是你的部落格好友小夢,希望我的文章可以給您帶來一定的幫助,話不多說,文章推上!歡迎大家在評論區唠嗑指正,覺得好的話别忘了一鍵三連哦!😘

你是真的“C”——【經典面試知識點】資料在記憶體中的大小端存儲方式前言🙌大小端介紹🙌經典的面試題目🙌總結撒花💞

前言🙌

    哈喽各位友友們😊,我今天又學到了很多有趣的知識,現在迫不及待的想和大家分享一下!😘我僅已此文,和大家分享【經典面試知識點】資料在記憶體中的大小端存儲方式~ 接下來都是精華内容,可不要錯過喲!!!😍😍😍

大小端介紹🙌

什麼大端小端呢?:

大小端存儲的标準定義:

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

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

大端和小端存在的意義

為什麼會有大小端模式之分呢?
  1. 這是因為在計算機系統中,是以位元組為機關的,每個位址單元都對應着一個位元組,一個位元組為8 bit。但是在C語言中除了8 bit的char之外,還有16 bit的short型,32 bit的long型(要看具體的編譯器),另外,對于位數大于8位的處理器,例如16位或者32位的處理器,由于寄存器寬度大于一個位元組,那麼必然存在着一個如何将多個位元組安排的問題。是以就導緻了大端存儲模式和小端存儲模式。
  2. 我們常用的 X86 結構是小端模式,而 KEIL C51 則為大端模式。很多的ARM,DSP都為小端模式。有些ARM處理器還可以由硬體來選擇是大端模式還是小端模式

經典的面試題目🙌

題目:請簡述大端位元組序和小端位元組序的概念,設計一個小程式來判斷目前機器的位元組序。

  • 簡述大端位元組序和小端位元組序的概念:

    1 . 大端位元組序:把一個資料的低位位元組中的資料,存放到記憶體的高位址處;高位位元組中的資料,存放到記憶體的低位址處。

    2 .小端位元組序:把一個資料的低位位元組中的資料,存放到記憶體的低位址處;高位位元組中的資料,存放到記憶體的高位址處。

你是真的“C”——【經典面試知識點】資料在記憶體中的大小端存儲方式前言🙌大小端介紹🙌經典的面試題目🙌總結撒花💞

如上圖所示,我們可以通過1,來判斷其低位元組的資料。如果為1,則是小端存儲;為0,則為大段存儲。

小程式設計代碼:

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
int check_sys()
{
	int a = 1;
	char* p = (char*)&a;
	if (*p == 1)
		return 1;//小端
	else
		return 0;//大端
}

int main()
{
	if (check_sys() == 1)
		printf("小端位元組序存儲方式\n");
	else
		printf("大端位元組序存儲方式\n");
	return 0;
}
           

該程式代碼可不可以再進行一個優化呢?其實是可以的。下面是優化的程式代碼:

#include<stdio.h>
int check_sys()
{
	int a = 1;
	return *((char*)&a);
}

int main()
{
	if (check_sys() == 1)
		printf("小端位元組序存儲方式\n");
	else
		printf("大端位元組序存儲方式\n");
	return 0;
}
           

總結撒花💞

   本篇文章旨在分享【經典面試知識點】資料在記憶體中的大小端存儲方式的相關知識點。希望大家通過閱讀此文有所收獲!😘如果我寫的有什麼不好之處,請在文章下方給出你寶貴的意見😊。如果覺得我寫的好的話請點個贊贊和關注哦~😘😘😘

繼續閱讀