快好知 kuaihz订阅看过栏目

 

在进行某些算法的C语言编程的时候,需要使几种不同类型的变量存放到同一段内存单元中。也就是使用覆盖技术,几个变量互相覆盖。这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作“共用体”类型结构,简称共用体,也叫联合体。

基本定义

是union 的中文解释,又称为共用体

主要用途

各种程序语言 都有这种数据结构,

汇编, C语言, C++ 都有这种数据类型,

它就是把各种基本类型捆绑在一起。

特别之处

“联合”与“结构”有一些相似之处。但两者有本质上的不同。在结构中各成员有各自的内存空间,一个结构体变量的总长度大于等于各成员长度之和。而在“联合”中,各成员共享一段内存空间,一个联合变量的长度等于各成员中最长的长度。应该说明的是,这里所谓的共享不是指把多个成员同时装入一个联合变量内,而是指该联合变量可被赋予任一成员值,但每次只能赋一种值,赋入新值则冲去旧值。如下面介绍的“单位”变量,如定义为一个可装入“班级”或“教研室”的联合后,就允许赋予整型值(班级)或字符型(教研室)。要么赋予整型值,要么赋予字符型,不能把两者同时赋予它。联合类型的定义和联合变量的说明:一个联合类型必须经过定义之后,才能把变量说明为该联合类型。

联合的定义

定义一个联合类型的一般形式为:

union 联合名

{

成员表

};

成员表中含有若干成员,成员的一般形式为: 类型说明符 成员名

成员名的命名应符合标识符的规定。

例如:

union perdata

{

int Class;

char Office;

};

定义了一个名为perdata的联合类型,它含有两个成员,一个为整型,成员名为Class;另一个为字符,字符名为Office。联合定义之后,即可进行联合变量说明,被说明为perdata类型的变量,可以存放整型量Class或存放字符型的变量Office。

联合变量的说明

联合变量的说明和结构变量的说明方式相同,也有三种形式。即先定义,再说明;定义同时说明和直接说明。

以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个字节。

联合体在单片机中的应用

单片机中经常会遇见分离高低字节的操作,比如进行计时中断复位操作时往往会进行

(65535-200)/256,(65535-200)%256这样的操作,而一个除法消耗四个机器周期,取余也需要进行一系列复杂的运算,如果在短时间内需要进行很多次这样的运算无疑会给程序带来巨大的负担。其实进行这些操作的时候我们需要的仅仅是高低字节的数据分离而已,这样利用联合体我们很容易降低这部分开销。

代码:

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的特性(此处应该有误,联合体内数据是按地址对齐的。具体是高位数据还是低位数据要看平台的大小端模式,51是大端,stm32默认是小端),如果其他编译器还请自测

TL1=test.a[1]; //test.a[1]中储存了test.n的低位数据

!that's good,仅仅用了一条减法指令就达到了除法、取余的操作,在进行高频率定时时尤为有用。

投标释义

所谓联合体投标,是指两个以上法人或者其他组织组成一个联合体,以一个投标人的身份共同投标的行为。在国际招标投标中,是经常被采用的投标形式.对于联合体投标可作如下理解:

1.联合体承包的联合各方为法人或者法人之外的其他组织。形式可以是两个以上法人组成的联合体、两个以上非法人组织组成的联合体、或者是法人与其他组织组成的联合体。

2.联合体是一个临时性的组织,不具有法人资格。组成联合体的目的是增强投标竞争能力,减少联合体各方因支付巨额履约保证而产生的资金负担,分散联合体各方的投标风险,弥补有关各方技术力量的相对不足,提高共同承担的项目完工的可靠性。如果属于共同注册并进行长期的经营活动的“合资公司”等法人形式的联合体,则不属于《招标投标法》所称 的联合体。

3.联合体的组成是“可以组成”,也可以不组成。是否组成联合体由联合体各方自己决定。对此《招标投标法》第三十一条第四款也有相应的规定。这说明联合体的组成属于各方自愿的共同的一致的法律行为。

4.联合体对外“以一个投标人的身份共同投标”。也就是说,联合体虽然不是一个法人组织,但是对外投标应以所有组成联合体各方的共同的名义进行,不能以其中一个主体或者两个主体(多个主体的情况下)的名义进行,即“联合体各方”“共同与招标人签订合同”。这里需要说明的是,联合体内部之间权利、义务、责任的承担等问题则需要依据联合体各方 订立的合同为依据。

5.联合体共同投标的联合体各方应具备一定的条件。比如,根据《招标投标法》的规定,联合体各方均应具备承担招标项目的相应能力;国家有关规定或者招标文件对投标人资格条件有规定的,联合体各方均应当具备规定的相应资格条件。

6.联合体共同投标一般适用于大型建设项目和结构复杂的建设项目。对此《建筑法》第 二十七条有类似的规定。

联合体投标申请资格预审必须符合以下要求:

⒈参加联合的所有成员都应分别填写完整的资格预审表格,且不允许任何单位提交或参加一个以上的投标.

⒉资格预审申请书中须指明为首的主办人,招标人与联合体之间的任何联系将通过为首的主办人进行.

⒊申请书必须确认,如果资格预审合格后联合体参加投标,投标文件及今后可能被授予的合同都将由所有合伙人签署,以便使法律对全体合伙人共同并分别具有约束力.

⒋申请书必须说明拟议中每个合伙人的参与情况及其责任.

除以上特殊条件外,其他方面与前述单独申请资格预审的要求基本一致.

投稿
非常不爽,删了吧! 相关词条:其他 共用体 共用体 整型量