C 結構體中的位域

2021-08-09 06:24:32 字數 869 閱讀 2735

結構體的儲存方式存在記憶體對齊問題,在本文中不展開討論,本文主要想說明兩個問題,第乙個是位域的賦值問題;還有乙個就是資料的表達形式。

好了,現在我們先討論一下位域的賦值問題;現假設有如下結構體

struct byte

;

首先我們知道,one和two儲存在同乙個位元組中,所以我們本能的以為語句

struct byte we=;
會將one的兩bit置為11,而把two的一位置為1;但是在實際的結果如下:

由此可知,這樣做並沒有將two賦值成功;下面這句能夠成功賦值

struct byte we=;
結果如下:

至此,對於結構體位域賦值問題討論到這裡,從上面程式的結果其實很多人都會發現為何最終結果是-1;那下面來看看下面的賦值語句會造成什麼結果

現在讓我們把目光聚集到we.one上面,第一次它的值為11(3)顯示為-1;第二次他的值為01(1)顯示為1;

對此我想很多人已經看明白了。其實就是按照高位把剩餘的高位補齊,然後按照int的方式顯示導致的,比如11會被補為11111111,而01補為00000001,這樣我們看到的結果就不再奇怪了!

結構體中的位域

位域 有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,c語言又提供了一種資料結構,稱為 位域 或 位段 所謂 位域 是把乙個位元組中的二進位劃分為幾個不同的區域,並說明每個區...

結構體中的位域

位域 有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,c語言又提供了一種資料結構,稱為 位域 或 位段 所謂 位域 是把乙個位元組中的二進位劃分為幾個不同的區域,並說明每個區...

結構體中的位域

結構體中的位域 位域有些資訊在儲存時,並不需要占用乙個完整的位元組,而只需佔幾個或乙個二進位制位。例如在存放乙個開關量時,只有0和1 兩種狀態,用一位二進位即可。為了節省儲存空間,並使處理簡便,c語言又提供了一種資料結構,稱為 位域 或 位段 所謂 位域 是把乙個位元組中的二進位劃分為幾個不同的區域...