C語言位域的使用與注意事項解析
C語言1.63W
C語言的位域是什麼呢?該怎麼使用呢?下面一起來看看C語言中位域的使用與注意事項解析吧!或許你就瞭解了。 位域的定義 有些信息在存儲時,並不需要佔用一個完整的字節, 而只需佔幾個或一個二進制位。例如在存放一個開關量時,只有0和1 兩種狀態, 用一位二進位即可。為了節省存儲空間,並使處理簡便,C語言又提供了一種數據結構,稱為“位域”或“位段”。所謂“位域”是把一個字節中的二進位劃分為幾個不同的區域,並説明每個區域的位數。每個域有一個域名,允許在程序中按域名進行操作。 這樣就可以把幾 個不同的對象用一個字節的二進制位域來表示。 位域的定義和位域變量的説明位域定義與結構定義相仿,其形式為: ? struct 位域結構名 { 位域列表 }; eg:struct weiyu { int a:2; int b:5; int :5;//此五位為空域,不能使用 int c:3; } 位域雖然簡單好用,但使用時需要注意: 1) 如果相鄰位域字段的類型相同,且其位寬之和小於類型的sizeof大小,則後面的字段將緊鄰前一個字段存儲,直到不能容納為止;2) 如果相鄰位域字段的類型相同,但其位寬之和大於類型的sizeof大小,則後面的字段將從新的存儲單元開始,其偏移量為其類型大小的整數倍;3) 整個結構體的總大小為最寬基本類型成員大小的整數倍。 4) 如果相鄰的`位域字段的類型不同,則各編譯器的具體實現有差異,VC6採取不壓縮方式,Dev-C++採取壓縮方式;5) 如果位域字段之間穿插着非位域字段,則不進行壓縮;(不針對所有的編譯器)注意:4 ,5跟編譯器有較大的關係,使用時要慎重,儘量避免。 ? #include "stdio.h" void main(int argn ,char *argv) { struct test { unsigned a:10; unsigned b:10; unsigned c:6; unsigned :2;//this two bytes can't use unsigned d:4; }data,*pData; data.a=0x177; data.b=0x111; data.c=0x7; data.d=0x8; pData=&data; printf("data.a=%x data.b= %x data.c=%x data.d=%xn",pData->a,pData->b,pData->c,pData->d);//位域可以使用指針printf("sizeof(data)=%dn",sizeof(data)); //4 bytes ,最常用的情況struct testLen{char a:5;char b:5; char c:5; char d:5; char e:5; }len; printf("sizeof(len)=%dn",sizeof(len)); //5bytes 規則2struct testLen1{char a:5;char b:2; char d:3; char c:2; char e:7; }len1; printf("sizeof(len1) =%dn",sizeof(len1)); //3bytes 規則1struct testLen2{char a:2;char :3; char b:7; long d:20; //4bytes char e:4; }len2; printf("sizeof(len2)=%dn",sizeof(len2)); //12 規則3,4,5,總長為4的整數倍,2+3 佔1byte,b佔1bye 由於與long對其,2+3+7 佔4字節,後面 d 與 e進行了優化 佔一個4字節struct testLen3{char a:2;char :3; char b:7; long d:30; char e:4; }len3; printf("sizeof(len3)=%dn",sizeof(len3));//12 規則3,4,5,總長為4的整數倍,2+3 佔1byte,b佔1bye 由於與long對其,2+3+7 佔4字節,後面 d佔一個4字節,為了保證與long對其e獨佔一個4字節}
-
C語言與JAVA的區別
很多人不明白C語言與C++和JAVE之間的區別,為此,為大家收集整理了下面的內容,歡迎閲讀!C語言C語言是一門通用計算機編程語言,應用廣泛。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語...
-
計算機等級考試二級C語言筆試精選習題
應屆畢業生考試網提供了計算機等級考試二級C語言筆試精選習題,幫助考生鍛鍊解題思路,加深理解知識點。更多資料訪問yjbys計算機等級考試網。1、C語言程序的基本單位是____A)程序行B)語句C)函數D)字符、C、12、C語言程序的三種基本結構是____A、順序結構,選擇結構,...
-
C語言插入排序算法及實例代碼
插入排序是排序算法的一種,下面小編為大家整理了C語言插入排序算法及實例代碼,希望能幫到大家!這裏以從小到大排序為例進行講解。基本思想及舉例説明插入排序的基本思想是,將元素逐個添加到已經排序好的數組中去,同時要求,插入的元素必須在正確的位置,這樣原來排序好...
-
C++中四種加密算法之DES源代碼
DES算法是一種最通用的對稱密鑰算法,因為算法本身是公開的,所以其安全性在於密鑰的安全性。基於密鑰的算法通常有兩類:對稱算法和公開密鑰算法。對稱算法的對稱性體現在加密密鑰能夠從解密密鑰推算出來,反之亦然。下面梳理了C++中四種加密算法之DES源代碼,供大家參...