標籤:軟體測試術語單片機c語言

在進行某些演算法的C語言編程的時候,需要使幾種不同類型的變數存放到同一段內存單元中。也就是使用覆蓋技術,幾個變數互相覆蓋。這種幾個不同的變數共同佔用一段內存的結構,在C語言中,被稱作「共用體」類型結構,簡稱共用體,也叫聯合體。

基本定義
是union 的中文解釋,又稱為共用體。

1主要用途

各種程序語言 都有這種數據結構,
彙編, C語言, C++ 都有這種數據類型,
它就是把各種基本類型捆綁在一起。

2特別之處

「聯合」與「結構」有一些相似之處。但兩者有本質上的不同。在結構中各成員有各自的內存空間,一個結構變數的總長度是各成員長度之和。而在「聯合」中,各成員共享一段內存空間,一個聯合變數的長度等於各成員中最長的長度。應該說明的是,這裡所謂的共享不是指把多個成員同時裝入一個聯合變數內,而是指該聯合變數可被賦予任一成員值,但每次只能賦一種值,賦入新值則衝去舊值。如前面介紹的「單位」變數,如定義為一個可裝入「班級」或「教研室」的聯合后,就允許賦予整型值(班級)或字元串(教研室)。要麼賦予整型值,要麼賦予字元串,不能把兩者同時賦予它。聯合類型的定義和聯合變數的說明一個聯合類型必須經過定義之後,才能把變數說明為該聯合類型。
聯合變數的說明
聯合變數的說明和結構變數的說明方式相同,也有三種形式。即先定義,再說明;定義同時說明和直接說明。以perdata類型為例,說明如下:
union perdata
{
int Class;
char Office;
};
union perdata a,b;
或者可同時說明為:
union perdata
{
int Class;
char Office;
}a,b;
或直接說明為:
union
{
int Class;
char Office;
}a,b;
經說明后的a,b變數均為perdata類型。a,b變數的長度應等於 perdata 的成員中最長的長度,即等於
Class的長度,共4個位元組。從圖中可見,a,b變數如賦予整型值時,只使用了4個位元組,而賦予字元時,可用1個位元組。
union類型是共享內存的,以size最大的結構作為自己的大小,這樣的話,myun這個結構就包含u這個結構體,而大小也等於u這個結構體的大小,在內存中的排列為聲明的順序x,y,z從低到高,然後賦值的時候,在內存中,就是x的位置放置4,y的位置放置5,z的位置放置6,現在對k賦值,對k的賦值因為是union,要共享內存,所以從union的首地址開始放置,首地址開始的位置其實是x的位置,這樣原來內存中x的位置就被k所賦的值代替了,就變為0了,這個時候要進行列印,就直接看內存里就行了,x的位置也就是k的位置是0,而y,z的位置的值沒有改變,所以應該是0,5,6
聯合體在單片機中的應用
單片機中經常會遇見分離高低位元組的操作,比如進行計時中斷複位操作時往往會進行
(65535-200)/255,(65535-200)%255這樣的操作,而一個除法消耗四個機器周期,取余也需要進行一些列複雜的運算,如果在短時間內需要進行很多次這樣的運算無疑會給程序帶來巨大的負擔。其實進行這些操作的時候我們需要的僅僅是高低位元組的數據分離而已,這樣利用聯合體我們很容易降低這部分開銷。
代碼:
union chufa{
int n; //n中存放要進行分離高低位元組的數據
char a[2];  //在keil c中一個整形佔兩個位元組,char佔一個位元組,所以n與數組a占的位元組數相同
}test;
test.n=65535-200;   //進行完這句后就一切ok了,下面通過訪問test中數組a的數據來取出高低位元組的數據
TH1=test.a[0];      //test.a[0]中存儲的是高位數據,這是由於keil的特性,如果其他編譯器還請自測
TL1=test.a[1];     //test.a[1]中儲存了test.n的低位數據
!that's good,僅僅用了一條減法指令就達到了除法、取余的操作,在進行高頻率定時時尤為有用。

3釋義

所謂聯合體投標,是指兩個以上法人或者其他組織組成一個聯合體,以一個投標人的身份共同投標的行為。在國際招標投標中,是經常被採用的投標形式.對於聯合體投標可作如下理解:
1.聯合體承包的聯合各方為法人或者法人之外的其他組織。形式可以是兩個以上法人組成的聯合體、兩個以上非法人組織組成的聯合體、或者是法人與其他組織組成的聯合體。
2.聯合體是一個臨時性的組織,不具有法人資格。組成聯合體的目的是增強投標競爭能力,減少聯合體各方因支付巨額履約保證而產生的資金負擔,分散聯合體各方的投標風險,彌補有關各方技術力量的相對不足,提高共同承擔的項目完工的可靠性。如果屬於共同註冊並進行長期的經營活動的「合資公司」等法人形式的聯合體,則不屬於《招標投標法》所稱 的聯合體。
3.聯合體的組成是「可以組成」,也可以不組成。是否組成聯合體由聯合體各方自己決定。對此《招標投標法》第三十一條第四款也有相應的規定。這說明聯合體的組成屬於各方自願的共同的一致的法律行為。
4.聯合體對外「以一個投標人的身份共同投標」。也就是說,聯合體雖然不是一個法人組織,但是對外投標應以所有組成聯合體各方的共同的名義進行,不能以其中一個主體或者兩個主體(多個主體的情況下)的名義進行,即「聯合體各方」「共同與招標人簽訂合同」。這裡需要說明的是,聯合體內部之間權利、義務、責任的承擔等問題則需要依據聯合體各方 訂立的合同為依據。
5.聯合體共同投標的聯合體各方應具備一定的條件。比如,根據《招標投標法》的規定,聯合體各方均應具備承擔招標項目的相應能力;國家有關規定或者招標文件對投標人資格條件有規定的,聯合體各方均應當具備規定的相應資格條件。
6.聯合體共同投標一般適用於大型建設項目和結構複雜的建設項目。對此《建築法》第 二十七條有類似的規定。
聯合體投標申請資格預審必須符合以下要求:
⒈參加聯合的所有成員都應分別填寫完整的資格預審表格,且不允許任何單位提交或參加一個以上的投標.
⒉資格預審申請書中須指明為首的主辦人,招標人與聯合體之間的任何聯繫將通過為首的主辦人進行.
⒊申請書必須確認,如果資格預審合格后聯合體參加投標,投標文件及今後可能被授予的合同都將由所有合伙人簽署,以便使法律對全體合伙人共同並分別具有約束力.
⒋申請書必須說明擬議中每個合伙人的參與情況及其責任.
除以上特殊條件外,其他方面與前述單獨申請資格預審的要求基本一致.

相關評論

同義詞:暫無同義詞