最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于大小端、位域的一些概念詳解

 更新時間:2013年10月08日 08:56:35   作者:  
我們常用的x86結(jié)構(gòu)都是小端模式,而大部分DSP,ARM也是小端模式,不過有些ARM是可以選擇大小端模式。所以對于上面的maxHeight是應(yīng)該以小端模式來存放,具體情況請看下面兩表

大小端:

對于像C++中的char這樣的數(shù)據(jù)類型,它本身就是占用一個字節(jié)的大小,不會產(chǎn)生什么問題。但是當(dāng)數(shù)制類型為int,在32bit的系統(tǒng)中,它需要占用4個字節(jié)(32bit),這個時候就會產(chǎn)生這4個字節(jié)在寄存器中的存放順序的問題。比如int maxHeight = 0x12345678,&maxHeight = 0x0042ffc4。具體的該怎么存放呢?這個時候就需要理解計算機(jī)的大小端的原理了。

大端:(Big-Endian)就是把數(shù)值的高位字節(jié)放在內(nèi)存的低位地址上,把數(shù)值的地位字節(jié)放在內(nèi)存的高位地址上。

小端:(Little-Endian)就是把數(shù)字的高位字節(jié)放在高位的地址上,低位字節(jié)放在低位地址上。

我們常用的x86結(jié)構(gòu)都是小端模式,而大部分DSP,ARM也是小端模式,不過有些ARM是可以選擇大小端模式。所以對于上面的maxHeight是應(yīng)該以小端模式來存放,具體情況請看下面兩表。

    地址 0x0042ffc4 0x0042ffc5 0x0042ffc6 0x0042ffc7

數(shù)值

0x78

0x56

0x34

0x12

圖(1)為小端模式

地址 0x0042ffc4 0x0042ffc5 0x0042ffc6 0x0042ffc7
數(shù)值

0x12

0x34

0x56

0x78

圖(2)為大端模式

通過上面的表格,可以看出來大小端的不同,在這里無法討論那種方式更好,個人覺得似乎大端模式更符合我的習(xí)慣。(注:在這里我還要說一句,其實在計算機(jī)內(nèi)存中并不存在所謂的數(shù)據(jù)類型,比如char,int等的。這個類型在代碼中的作用就是讓編譯器知道每次應(yīng)該從那個地址起始讀取多少位的數(shù)據(jù),賦值給相應(yīng)的變量。)

位域:

在計算機(jī)中是采用二進(jìn)制0和1來表示數(shù)據(jù)的,每一個0或者1占用1位(bit)存儲空間,8位組成一個字節(jié)(byte),為計算機(jī)中數(shù)據(jù)類型的最小單位,如char在32bit系統(tǒng)中占用一個字節(jié)。但是正如我們知道的,有時候程序中的數(shù)據(jù)可能并不需要這么的字節(jié),比如一個開關(guān)的狀態(tài),只有開和關(guān),用1和0分別替代就可以表示。此時開關(guān)的狀態(tài)只需要一位存儲空間就可以滿足要求。如果用一個字節(jié)來存儲,顯然浪費(fèi)了另外的7位存儲空間。所以在C語言中就有了位段(有的也叫位域,其實是一個東西)這個概念。具體的語法就是在變量名字后面,加上冒號(:)和指定的存儲空間的位數(shù)。具體的定義語法如下:

復(fù)制代碼 代碼如下:

struct 位段名稱   
{      
   位段數(shù)據(jù)類型   位段變量名稱 : 位段長度;
   .......    
}  

//實例  
struct Node 

   char a:2; 
   double i; 
   int c:4; 
}node;


其實定義很簡單,上面示例的意義是,定義一個char變量a,占用2位存儲空間,一個double變量i,以及一個占用4位存儲的int變量c。請注意這里改變了變量本來占用字節(jié)的大小,并不是我們常規(guī)定義的一個int變量占用4個字節(jié),一個char變量占用1一個字節(jié)。在實際的運(yùn)行環(huán)境中運(yùn)行,由于內(nèi)存字節(jié)對齊,得到sizeof(node) = 24。

相關(guān)文章

  • Qt實現(xiàn)SqlRelationalTable關(guān)聯(lián)表組件

    Qt實現(xiàn)SqlRelationalTable關(guān)聯(lián)表組件

    在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,實現(xiàn)圖形化開發(fā)極大的方便了開發(fā)效率,本章將重點介紹SqlRelationalTable關(guān)聯(lián)表組件的常用方法及靈活運(yùn)用,感興趣的可以了解一下
    2023-12-12
  • C語言 棧的表示和實現(xiàn)詳細(xì)介紹

    C語言 棧的表示和實現(xiàn)詳細(xì)介紹

    這篇文章主要介紹了C語言 棧的表示和實現(xiàn)詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • C語言詳解無頭單向非循環(huán)鏈表各種操作方法

    C語言詳解無頭單向非循環(huán)鏈表各種操作方法

    無頭單向非循環(huán)鏈表:結(jié)構(gòu)簡單,一般不會單獨(dú)用來存數(shù)據(jù)。實際中更多是作為其他數(shù)據(jù)結(jié)構(gòu)的子結(jié)構(gòu),如哈希桶、圖的鄰接表等等。另外這種結(jié)構(gòu)在筆試面試中出現(xiàn)很多
    2022-04-04
  • C語言技巧提升之回調(diào)函數(shù)的掌握

    C語言技巧提升之回調(diào)函數(shù)的掌握

    這篇文章主要為大家詳細(xì)介紹一下C語言中回調(diào)函數(shù)的用法教程,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C語言有一定幫助,需要的可以參考一下
    2022-12-12
  • VC++操作SQLite簡單實例

    VC++操作SQLite簡單實例

    這篇文章主要介紹了VC++操作SQLite,很實用的功能,需要的朋友可以參考下
    2014-07-07
  • C++實現(xiàn)詞法分析器

    C++實現(xiàn)詞法分析器

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)詞法分析器的相關(guān)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • C++與Lua協(xié)程交互的示例詳解

    C++與Lua協(xié)程交互的示例詳解

    Lua 語言不支持真正的多線程,即不支持共享內(nèi)存的搶占式線程,在執(zhí)行協(xié)程體的 Lua 腳本時,Lua 同樣可以調(diào)用 C++ 的函數(shù),本文給大家介紹了C++ 與 Lua 的協(xié)程交互,需要的朋友可以參考下
    2024-02-02
  • Qt界面美化之自定義qss樣式表的詳細(xì)步驟

    Qt界面美化之自定義qss樣式表的詳細(xì)步驟

    很多人應(yīng)該和我一樣,想做界面才接觸的Qt,結(jié)果就是做不出來華麗的界面,下面這篇文章主要給大家介紹了關(guān)于Qt界面美化之自定義qss樣式表的詳細(xì)步驟,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • C語言獲取文件大小的兩種方式

    C語言獲取文件大小的兩種方式

    因為音視頻開發(fā)的需要,經(jīng)常會寫一些文件輸入輸出的測試程序,常常用到獲取文件大小的函數(shù),本篇文章就記錄一下常用的兩種獲取文件大小的方式,希望對大家有所幫助
    2023-11-11
  • C/C++實現(xiàn)動態(tài)庫動態(tài)加載

    C/C++實現(xiàn)動態(tài)庫動態(tài)加載

    在很多項目中,我們多少會用到第三方動態(tài)庫,這些動態(tài)庫一般都是相對固定,使用也很簡單,下面我們就來看看c/c++中如何實現(xiàn)動態(tài)庫動態(tài)加載吧
    2024-01-01

最新評論

囊谦县| 漳浦县| 溧水县| 酒泉市| 手游| 二手房| 灵川县| 全南县| 宁安市| 洛隆县| 邳州市| 千阳县| 凤城市| 凯里市| 哈巴河县| 雷州市| 塘沽区| 泗洪县| 嘉鱼县| 浮山县| 赣州市| 天祝| 屯留县| 义马市| 稻城县| 和田县| 凭祥市| 楚雄市| 文水县| 扬州市| 宝应县| 宁都县| 宣城市| 舟曲县| 明星| 承德县| 都昌县| 广汉市| 石门县| 湖北省| 邹平县|