欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關于大小端、位域的一些概念詳解

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

大小端:

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

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

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

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

    地址 0x0042ffc4 0x0042ffc5 0x0042ffc6 0x0042ffc7

數值

0x78

0x56

0x34

0x12

圖(1)為小端模式

地址 0x0042ffc4 0x0042ffc5 0x0042ffc6 0x0042ffc7
數值

0x12

0x34

0x56

0x78

圖(2)為大端模式

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

位域:

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

復制代碼 代碼如下:

struct 位段名稱   
{      
   位段數據類型   位段變量名稱 : 位段長度;
   .......    
}  

//實例  
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é)。在實際的運行環(huán)境中運行,由于內存字節(jié)對齊,得到sizeof(node) = 24。

相關文章

  • C++實現簡易選課系統代碼分享

    C++實現簡易選課系統代碼分享

    這篇文章主要介紹了C++實現簡易選課系統及實現代碼的分享,具有一定的參考價值,需要的小伙伴可以參考一下,希望對你有所幫助
    2022-01-01
  • mac 配置Clion運行C和C++的環(huán)境的詳細步驟

    mac 配置Clion運行C和C++的環(huán)境的詳細步驟

    這篇文章主要介紹了mac 配置Clion運行C和C++的環(huán)境的步驟詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • c語言中形參與實參的關系解讀

    c語言中形參與實參的關系解讀

    這篇文章主要介紹了c語言中形參與實參的關系,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • C++類中的特殊成員函數示例詳解

    C++類中的特殊成員函數示例詳解

    這篇文章主要給大家介紹了關于C++類中特殊成員函數的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-02-02
  • C語言中access/_access函數的使用實例詳解

    C語言中access/_access函數的使用實例詳解

    本文通過實例代碼給大家介紹了C語言中access/_access函數的使用,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • C++拷貝構造函數(深拷貝與淺拷貝)詳解

    C++拷貝構造函數(深拷貝與淺拷貝)詳解

    深拷貝和淺拷貝可以簡單理解為:如果一個類擁有資源,當這個類的對象發(fā)生復制過程的時候,資源重新分配,這個過程就是深拷貝,反之,沒有重新分配資源,就是淺拷貝
    2013-09-09
  • C++類和對象到底是什么

    C++類和對象到底是什么

    C++ 是一門面向對象的編程語言,理解 C++,首先要理解類(Class)和對象(Object)這兩個概念。下面和小編一起來學習吧
    2021-09-09
  • C語言用函數指針實現一個特別的計算器

    C語言用函數指針實現一個特別的計算器

    函數指針是一個指針變量,它可以存儲函數的地址,然后使用函數指針,下面這篇文章主要給大家介紹了關于C語言用函數指針實現計算器的方法,需要的朋友可以參考下
    2022-07-07
  • 解析C++中虛析構函數的作用

    解析C++中虛析構函數的作用

    本篇文章是對C++中虛析構函數的作用進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C++哈希應用之位圖,哈希切分與布隆過濾器詳解

    C++哈希應用之位圖,哈希切分與布隆過濾器詳解

    這篇文章主要為大家詳細介紹了C++哈希應用中的位圖、哈希切分與布隆過濾器,文中的示例代碼講解詳細,具有一定的學習價值,需要的可以參考一下
    2023-04-04

最新評論