close

克薩語翻譯  有些信息在貯存時,其實不需要佔用一個完全的byte, 而只需占幾個或一個二進制位翻譯例如在存放一個開關量時,只有0和1 兩種狀況, 用一名二進位便可翻譯為了節省儲存空間,並使處置懲罰簡潔,C說話又供應了一種數據結構,稱為「位域」或「位段」翻譯

所謂「位域」是把一個byte中的二進位劃分為幾個分歧的區域, 並申明每個區域的位數。每一個域有一個域名,允許在法式中按域名進行操作。 如許就可以把幾個分歧的對象用一個byte的二進制位域來表示。


1、位域的界說和位域變量的申明位域定義與結構界說相仿,其情勢為:


  struct 位域構造名


  { 位域列表 };


  其中位域列表的形式為: 類型申明符 位域名:位域長度


  例如:


struct bs
{
 int a:8;
 int b:2;
 int c:6;
};


  位域變量的申明與佈局變量說明的方式溝通。 可採用先界說後申明,同時界說說明或直接申明這三種體例翻譯例如:


struct bs
{
 int a:8;
 int b:2;
 int c:6;
}data;


  說明data為bs變量,共佔兩個byte翻譯個中位域 a占8位,位域 b占2位,位域 c占6位。對於位域的定義另有以下幾點申明:


  1. 一個位域必須貯存在同一個byte中,不克不及跨兩個byte。如一個byte所剩空間不敷存放另外一位域時,應從下一單元起寄存該位域。也能夠成心使某位域從下一單元開始翻譯例如:


struct bs
{
 unsigned a:4
 unsigned :0 /*空域*/
 unsigned b:4 /*從下一單位起頭寄存*/
 unsigned c:4
}


  在這個位域定義中,a佔第一byte的4位,後4位填0表示不利用,b從第二byte起頭,佔用4位,c佔用4位。


  2. 由於位域不許可跨兩個byte,是以位域的長度不能大於一個byte的長度,也就是說不克不及跨越8位二進位翻譯


  3. 位域可以無位域名,這時它只用來作填充或調劑位置。無名的位域是不能利用的。例如:


struct k
{
 int a:1
 int :2 /*該2位不克不及使用*/
 int b:3
 int c:2
};


  從以上剖析可以看出,位域在本質上就是一種佈局類型, 不外其成員是按二進位分派的。


  二、位域的使用


  位域的利用和佈局成員的利用相同,其一般形式為: 位域變量名·位域名 位域答應用各類花式輸出。


main(){
 struct bs
 {
  unsigned a:1;
  unsigned b:3;
  unsigned c:4;
 } bit翻譯社*PBit;
 bit.a=1;
 bit.b=7;
 bit.c=15;
 printf("%d翻譯社%d,%d "翻譯社bit.a,bit.b,bit.c);
 PBit=&bit;
 PBit->a=0;
 PBit->b&=3;
 PBit->c=1;
 printf("%d,%d,%d "翻譯社PBit->a,PBit->b,PBit->c);
}


  上例程序中定義了位域構造bs,三個位域為a,b,c。申明了bs類型的變量bit和指向bs類型的指針變量PBit。這暗示位域也是可使用指標的。


  程序的9、10、11三行離別給三個位域賦值翻譯( 應注意賦值不克不及跨越該位域的允許局限)程序第12行以整型量格局輸出三個域的內容翻譯第13行把位域變量bit的地址送給指針變量PBit。第14行用指針體例給位域a重新賦值,賦為0。第15行利用了復合的位運算符"&=", 該行相當於: PBit->b=PBit->b&3位域b中原有值為7,與3作按位與運算的成果為3(111&011=011,十進制值為3)。一樣,程序第16行中利用了復合位運算"=", 相當於: PBit->c=PBit->c1其結果為15。法式第17行用指針體例輸出了這三個域的值。




本篇文章引用自此: http://bkboy.pixnet.net/blog/post/21021022-%E7%B5%90%E6%A7%8B%E4%B8%AD%E7%9A%84%E5%86%92%E8%99%9F%E3有關各國語文翻譯公證的問題歡迎諮詢天成翻譯公司02-77260931

arrow
arrow
    文章標籤
    翻譯社
    全站熱搜
    創作者介紹
    創作者 marshawitd45o 的頭像
    marshawitd45o

    marshawitd45o@outlook.com

    marshawitd45o 發表在 痞客邦 留言(0) 人氣()