首页 C第2版(第11章_位运算)

C第2版(第11章_位运算)

举报
开通vip

C第2版(第11章_位运算)第11章位运算本章主要内容1.按位取反运算2.按位左移运算3.按位左移运算4.按位与运算5.按位或运算6.按位异或运算7.复合位运算第11章位运算11.1位运算符C既具有高级语言的特点,又具有低级语言的功能,位运算能力就是其特色之一。所谓位运算就是指进行二进制位的运算。 C提供的位运算符有: 运算符含义 & 按位与 ¦ 按位或  按位异或 ~ 取反 << 左移 >> 右移说明:位运算符中除“~”外,其余均为二目运算符...

C第2版(第11章_位运算)
第11章位运算本章主要内容1.按位取反运算2.按位左移运算3.按位左移运算4.按位与运算5.按位或运算6.按位异或运算7.复合位运算第11章位运算11.1位运算符C既具有高级语言的特点,又具有低级语言的功能,位运算能力就是其特色之一。所谓位运算就是指进行二进制位的运算。 C提供的位运算符有: 运算符含义 & 按位与 ¦ 按位或  按位异或 ~ 取反 << 左移 >> 右移说明:位运算符中除“~”外,其余均为二目运算符,即要求两侧各有一个运算量。运算量只能是整型或字符型的数据,不能为实型数据。11.2“按位与”运算符&参加运算的两个运算量之对应位都为1,则该位的结果为1,否则为0。即: 0&0=00&1=01&0=01&1=1例: 3&5=1 3的补码: 00000011 5的补码: 00000101& 00000001&运算符的用途:清零如果想将一个单元清零(全部二进位为),则只要找一个数的补码的对应位0与被清零数的对应位1刚好对应,然后使两者进行&运算。如: 00101011 & 1001010000000000取一个数中的某些指定位如: a: 0010110010101100 b: 0000000011111111(377)8&0000000010101100得到a的低8位保留一个数的某一位如: 01010100(84)10& 00111011(59)1000010000(16)1011.3“按位或”运算符¦参加运算的两个运算量之对应位只要有一个为1,则该位的结果为1。即:0¦0=00¦1=11¦0=11¦1=1如: 00110000(060)8 ¦ 00001111(017)800111111(077)8即一个数与017进行按位或运算,就可将该数的低4位全置为1;与0377进行按位或运算,就可将该数的低8位全置为1。11.4“异或”运算符参加运算的两个运算量的对应位相同,则该位的结果为0。否则为1。即:00=001=110=111=0如: 00111001(57)10、(071)8 00101010(42)10、(052)800010011(19)10、(023)8运算符的用途:使指定的位翻转如: 01111010 00001111对应原数的低4位均置为101110101原数的低4位被翻转若a=3,b=4。则a=ab;b=ba;a=ab;结果是什么?交换两个值,不用临时变量例如:a=3,b=4。想将a和b的值互换,可以用以下赋值语句实现:a=a∧b;b=b∧a;a=a∧b;a=011(∧)b=100a=111(a∧b的结果,a已变成7)(∧)b=100b=011(b∧a的结果,b已变成3)(∧)a=111a=100(a∧b的结果,a已变成4)11.5“取反”运算符~~运算是对一个二进制数按位取反,即将0变为1,1变为0。8位全1用377;16位全1用177777;32位全1用37777777777。11.6“左移”运算符<<<<用来将一个数的各二进制位全部左移若干位,并在右边补若干个0。高位左移后溢出,舍弃不起作用。如:<<运算的最大用途是做乘法运算。将乘以2n的幂运算处理为左移n位。11.7“右移”运算符>>>>用来将一个数的各二进制位全部右移若干位,移到右边的低位被舍弃,对无符号数,高位补0。如:a为00001111,则a>>2为0000001111右移一位相当于除以2,右移n位相当于除以2n。(此2位被舍弃)注意:在右移时,需要注意符号位问题。若为无符号数,右移时左边高位移入0。若为有符号数,如果原来符号位为0(正数),则左边移入0;如果原来符号位为1,左边移入0的称为“逻辑右移”,移入1的称为“算术右移”。大多数C语言均采用算术移位。如: a:1001011111101101(113755)8 a>>1:0100101111110110逻辑右移,得045766 a>>1:1100101111110110算术右移,得14576611.8程序范例例11.1取一个整数a从右端开始的4~7位。步骤:先使a右移4位。即: a>>(7–4+1)a>>4设置一个低4位全为1,其余全为0的数。即: ~(~0<<4)将两者进行&运算未右移时的情况右移4位后的情况#include<stdio.h>main(){unsigneda,b,c,d;scanf("%o",&a);b=a>>4; /*b=a>>(m-n+1)*/c=~(~0<<4); /*c=~(~0<<n)*/d=b&c;printf("%o\n%o\n",a,d);}运行情况:33133115例11.2循环移位。将a右循环移4位。将a的右端n位放到b的高端n位中。 b=a<<(16–n)将a右移n位,其左端高位补n个0。 c=a>>n;将c与b进行按位或运算。 c=c¦bmain(){unsigneda,b,c;intn;scanf(“a=%o,n=%d”,&a,&n);b=a<<(16–n);c=a>>n;c=c¦b;printf(“%o\n%o\n”,a,c);}运行情况:a=157653,n=3157653(1101111110101011)275765(0111101111110101)211.9位段有时存储一个信息不必用一个或多个字节,可以在一个字节中存放几个信息。例如,“真”或“假”用1或0 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示,只需要1位就够了。一、在一个字节中存放几个数据图中:a、b、c、d分别占2位、6位、4位、4位。假定c原来的值为0,现要变为12,则:将数12左移4位,使1100成为右边起第4~7位。将data与12<<4按位或即可(设data中第4~7位原来为0)。若c的原值不为0,则应先使c为0。方法如下:data=data&01774170177417称为“屏蔽字”当然也可以用:data=data&~(15<<4)来实现,而不必计算屏蔽码。从而可以得到:data=data&~(15<<4)¦(n&15)<<4;/n为赋给c的值/二、位段位段是以位为单位定义长度的结构体类型中的成员。structpacked_data{unsigneda:2;unsignedb:6;unsignedc:4;unsignedd:4;inti;}data;结构体中a、b、c、d共占2个字节,i占2个字节。几点说明:位段也是一种结构体分量,其引用方法与结构体相同。如: data.a=2; data.b=3;长度为的位段可以使其后的位段从下一个存储单元开始存放。如: unsigneda:1; unsignedb:2;/在一个存储单元/ unsigned:0; unsignedc:3;/另一个存储单元/必须注意位段分量允许的最大取值范围。允许不允许一个位段不得跨2个存储单元。如:unsigneda:6;unsigneda:6;unsigneda:5; unsigneda:6;unsigneda:6;unsigned:0;unsigneda:5;可以定义无名位段。如:unsigneda:1;unsigned:2;unsignedb:3;一个位段的长度不得大于一个存储单元的长度,也不能定义位段数组。位段可以用整型格式符输出。如:printf(“%d,%d,%d”,data.a,data.b,data.c);也可以用%u,%o,%x等格式符输出。位段可以在数值表达式中引用,它会被系统自动地转换成整型数。如:data.a+data.b是合法的。 单操作数参与的位运算符~ 取反<< 左移>> 右移2.多操作数参与的位运算符 & 按位与¦ 按位或 按位异或3.位运算的应用一、单选题二、判断题三、填空题四、编程题【题11.31】【题11.32】【题11.34】【题11.37】【题11.38】【题11.39】全部
本文档为【C第2版(第11章_位运算)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
xxj7584
暂无简介~
格式:ppt
大小:1MB
软件:PowerPoint
页数:0
分类:建造师考试
上传时间:2020-03-18
浏览量:0