yjs第12章位运算



《yjs第12章位运算》由会员分享,可在线阅读,更多相关《yjs第12章位运算(18页珍藏版)》请在装配图网上搜索。
1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,12.1 位运算,C,语言具有位逻辑运算和移位运算的独特功能,参与位运算的运算量必须是整数。位逻辑运算包括&、|、四种运算,移位运算有两种运算。其中位单目运算符。,12.1.1,按位与,12.1.2,按位或,12.1.3,按位异或,12.1.4,按位取反,12.1.5,按位左移,12.1.6,按位右移,12.1.7,位运算的复合赋值运算符,12.1.1 按位与,参与运算的量,如果相对应的两位都为1,则该位的结果值为1,否则为0,即:,0&0=0 0&1=0 1&0=0 1&1=1,如:,a,的值为0,x12
2、34,b,的值为0,x00,a&b,运算的结果,c,应为:,a 0001 0010 0011 0100,&b 0000 0000 1111 1111,c 0000 0000 0011 0100,按位与常用于将某个运算量的某些位清0或提取某些位的值,如本例中,将变量的高8位清0,同时保留或提取低8位的值,可用一个高8位为0,低8位为1的值0,x00ff,和它进行按位与。,12.1.2 按位或,参与运算的量,如果相对应的两位都为0,则该位的结果值为0,否则为1,即:,0|0=0 0|1=1 1|0=1 1|1=1,如:,a,的值为0,x1234,b,的值为0,x00,a|b,运算的结果,c,应为:
3、,a 0001 0010 0011 0100,|b 0000 0000 1111 1111,c 0001 0010 1111 1111,按位或常用于将某个运算量的某些位置1,如本例中将变量的低8位置1,高8位不变,可用一个高8位为0,低8位为1的值0,x00ff,和它进行按位或。,12.1.3 按位异或,参与运算的量,如果相对应的两位相异,则该位的结果为1,否则为0,即:,00=0 01=1 10=1 11=0,如:,a,的值为0,x1234,b,的值为0,x00,a,b,运算的结果,c,应为:,a 0001 0010 0011 0100,b 0000 0000 1111 1111,c 000
4、1 0010 1100 1011,按位异或有“与1异或”该位翻转,“与0异或”该位不变的规律。如本例中用0,x00ff,进行按位异或,使变量,a,的低8位翻转,高8位不变。,12.1.4 按位取反,将参与运算量的相对应位的值取反,即1变0,0变1。,如:,a,的值为0,x1234,a,运算的结果,c,应为:,a 0001 0010 0011 0100,c 1110 1101 1100 1011,12.1.5 按位左移,按位左移是将一个运算量的各位依次左移若干位,低位补0,高位舍弃不要。,假设机器字长为8位,变量,a,的值为16,将,a,左移二位,即,a=a2:,右移前 0000 1111,右移
5、后 0000 0011,如果,a,是带符号的负数,,a=-16,,存放在机器中的补码为1111 0000,则,a=a2,,值为-4。,右移前 1111 0000,右移后 1111 1100,表3.3 位运算符的运算规则,运算符,名称,运算规则,&,位与,两个相应位全1为1,其余为0,|,位或,两个相应位全0为0,其余为1,位异或,两个相应位相同为0,其余为1,取反,把操作数各位0变1,1变0,右移,把操作数右移指定的位数,12.1.7 位运算的复合赋值运算符,共有五种位运算的复合赋值运算符:&=(位与赋值)、|=(位或赋值)、=(位异或赋值)、=(按位右移赋值)、=3,相当于,a=a3,12.
6、2 位运算举例,见例12.1 12.2,12.2 位段的概念,所谓,位段,,相当于结构体类型中的成员,但是定义位段的长度是以位为单位。它是一种特殊的结构体类型。,(1)位段的定义,定义位段的一般形式为:,struct,结构体类型标识符,unsigned,位段名1:长度1;,unsigned,位段名2:长度2;,.,unsigned,位段名,n:,长度,n;,变量名表;,(,2)说明:,在,定义中,每个位段(相当于成员)的长度是以位为单位,因此位段的类型为,unsigned,。,2.一个位段必须存储在同一存储单元,不能跨两个单元。即一个位段的长度不能大于一个单元存放。,3.当某个位段开始存放时,
7、若相应的存储单元空间不够,则剩余空间不用,该位段将在下一个单元存放。,例如,设某个系统存储单元长度为8(一个字节),且有如下的定义:,struct,unsigned a:4;,unsigned b:2;,unsigned c:6;,x;,a,b,c,4.可以定义无名位段。,例如:,struct,unsigned a:4;,unsigned :3;,unsigned b:2;,unsigned c:6;,x;,此,位段无名,该3位闲置不用。,5.可以用长度为0的无名位段,使下一个位段从另一个存储单元开始存放。,struct,unsigned,aa,:4;,unsigned :3;,unsigned bb:2;,unsigned :0;,unsigned cc:6;,y;,6.注意,不能定义位段数组。,(,3)位段的引用:,可以用赋值语句赋值,例:,x.a=4;y.cc=6;,可以在表达式中引用,C,语言将自动将其转换,为,int,类型,例:,x.a+;y.cc=y.,aa,+1;,可以用整型格式输出,例:,printf,(“a=%d b=%d c=%d”,x.a,x.b,x.c);,变量名.位段名,第12章结束,
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。