a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C > 正文

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

2020-01-26 15:47:05
字體:
來源:轉載
供稿:網友

大小端:

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

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

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

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

    地址0x0042ffc40x0042ffc50x0042ffc60x0042ffc7

數值

0x78

0x56

0x34

0x12

圖(1)為小端模式

地址0x0042ffc40x0042ffc50x0042ffc60x0042ffc7
數值

0x12

0x34

0x56

0x78

圖(2)為大端模式

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

位域:

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

復制代碼 代碼如下:

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

//實例  
struct Node 

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


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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 欧美一级在线观看 | 亚洲人成人一区二区在线观看 | 亚洲欧美国产一区二区 | 午夜精品久久久久 | 一区二区三区在线免费观看 | 黄色影片网址 | 国产免费一级片 | 久久成人一区二区 | 久久久久黄色 | 毛片大全 | 黄色在线免费观看 | 8×8x拔擦拔擦在线视频网站 | 成人1区2区 | 四虎首页 | 亚洲视频在线播放 | 久久9视频 | 第一福利丝瓜av导航 | 国产成人涩涩涩视频在线观看 | 国产精品一区在线 | 欧美日韩精品一区 | 一区二区不卡 | 日韩av免费看 | 日本在线免费观看 | 日本欧美在线观看 | 久草综合网 | 一区二区三区视频在线观看 | 日韩欧美在线视频 | 精品国产一区二区三区久久久 | 日本不卡高字幕在线2019 | 久久久久久av | 欧美成人二区 | 一区视频 | 最新午夜综合福利视频 | 久久精彩视频 | 免费一区| 日韩欧美精品区 | 国产精品视频一区二区三区, | 国产女爽123视频.cno | 国产一区二区三区高清 | 亚洲韩国精品 | 久久国产精品免费视频 |