分享
分销 收藏 举报 申诉 / 30
播放页_导航下方通栏广告

类型第11章+位运算.ppt

  • 上传人:xrp****65
  • 文档编号:13088344
  • 上传时间:2026-01-14
  • 格式:PPT
  • 页数:30
  • 大小:176KB
  • 下载积分:10 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    11 运算
    资源描述:
    ,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第11章 位运算,11.1 位运算符,11.2 位段,11.3应用举例,11.1 位运算符,当两个运算对象的位数不同时,系统将自动进行如下处理:,先将两个运算数右端对齐。,再将位数不足的一个运算对象向高位扩充,即:无符号数和正整数左端用0补齐;负数左端用1补齐;然后对位数相等的这两个数按位进行运算。,“按位与”运算(&),“按位与”运算是将参加运算的两操作对象,按对应的二进制位分别进行“逻辑与”运算。,运算规则为:只有两个相应位都为1时,该位的运算结果才为1;两个相应位的值相异或均为0时,该位的运算结果为0。,11.1 位运算符,【例11.1】求表达式12&10的值。,main(),char x=12,y=10;,printf,(“%d,%dn”,x,y);,x=x,printf,(“%d,%dn”,x,y);,输出结果为:,12,10,8,10,11.1 位运算符,按位与运算用途:,清零:若想将某个存储单元清零,只需将这个存储单元的值与零进行“与”运算。,【例11.2】分析下面程序结果,main(),char,ch,=46;,printf,(%d n,ch,);,ch,=,ch,printf,(%d n,ch,);,输出结果为:46,0,11.1 位运算符,获取指定位:如果要想获取某数据,X,的指定位,则可以用一个数与,X,进行“与”运算,此数在与指定位相同的位上的值为1,其余各位为0。,【例11.3】从键盘输入一个整数,判断此数是否能被2整除。,#,include,main(),int,x;,printf,(Please input a number:);,scanf,(%d,if(x&0 x01)=0)/*,通过与运算,只保留该数的最低位,然后判断其是否为0*/,printf,(n%d can be divided by 2 exactly!,x);/*,最低位为0,该数能被2整除*/,else,printf,(n%d cant be divided by 2 exactly!,x);/*,最低位为1,不能被2整除*/,11.1 位运算符,“按位或”运算(|),按位或运算是将参加运算的两操作对象,按对应的二进制位分别进行“逻辑或”运算。,运算规则为:只有两个相应位都为0时,该位的运算结果才为0,其它情况下,结果全为1。,【例11.4】求表达式12|10的值。,main(),char x=12,y=10;,printf,(“%d,%dn”,x,y);,x=x|y;,printf,(“%d,%dn”,x,y);,输出结果为:,12,10,14,10,11.1 位运算符,用途:按位“或”经常用来对一个数据的某些位置1。,【例11.5】把整数,x(8,位)的低4位置1,高4位不变。,main(),char x=67;,printf,(“%dn”,x);,x=x|15;,printf,(“%dn”,x);,输出结果为:,67,79,11.1 位运算符,“按位异或”运算(),按位或运算是将参加运算的两操作对象,按对应的二进制位分别进行“按位异或”运算。,运算规则为“按位异或”的应用:参加运算的两个运算量,如果两个相对应位上的值不同,则该位的结果为1;如果对应位上的值相同,则该位的结果为0。,“按位异或”的应用,使特定位翻转,即使指定的位求反。,【例11.6】设,x=46,,将其高4位保留原样,低4位各位求反。,main(),char x=46;,printf,(“%dn”,x);,x=x15;,printf,(“%dn”,x);,11.1 位运算符,输出结果为:,46,33,对变量置零。每一个数与它自身进行“异或”运算,结果各位均为零。即:,xx=0。,【,例11.7】不用临时变量,交换两个变量的值。,main(),char x=12,y=10;,printf,(“%d,%dn”,x,y);,x=xy;y=yx;x=xy;,printf,(“%d,%dn”,x,y);,输出结果为:,12,10,10,12,11.1 位运算符,“按位取反”运算(),“,按位取反”运算符“”是唯一的一个单目位运算符,用来将一个二进制数按位取反,即将1变0,将0变1。,【例11.8】给出一个数的原码,求出该数的补码。,main(),unsigned,int,a;/*,声明一个无符号的整数,a*/,unsigned,int getbits,(unsigned);/*,函数声明*/,printf,(,nInput,an octal number:);,scanf,(%o,/*,以八进制形式输入一个无符号的整数*/,printf,(result:%o,getbits,(a);/*,以八进制形式输出*/,11.1 位运算符,unsigned,int getbits,(unsigned value)/*,求一个二进制数的补码*/,unsigned,int,z;,z=value,if(z=10000000),z=value+1;/*,对负数求其补码*/,else,z=value;/*,正数不变*/,return(z);,运行情况如下:,Input an octal number:2345,result:2345,再次运行:,Input an octal number:1252525,result:5253,11.1 位运算符,“左移”运算(),左移运算符“”是双目运算符,左移运算的一般形式为:,运算对象左移位数,作用:将一个数的各二进制位依次左移若干位(由左移位数给出),左移时,右端(低位)补0,左端(高位)移出的部分舍去。,【例11.9】输入两个1位十进制数字符,a,和,b,,由,a、b,组合生成整数,c(c,用字符类型表示),并显示出来。生成规则是:,a,的低4位作为,c,的高4位,,b,的低4位作为,c,的低4位。,屏蔽掉,a,b,的高4位;,a,左移4位,使,a,的低4位成为高4位;,将,a,和,b,拼在一起,形成,c。,11.1 位运算符,main(),char a,b,c;,while(1)/*,输入,a,b*/,printf,(Please input a and b:n);,scanf,(%c%c,if(a=0),a=a),右移运算符“”是双目运算符,右移运算的一般形式为:,运算对象右移位数,作用:将一个数的各二进制位依次右移若干位(由右移位数给出),右移时,右端(低位)移出的部分舍去,左端(高位)移入的二进制数分两种情况:对于无符号数和正整数,高位补0;对于负整数,高位补1。,例如:,int,a=5,b=-3,x,y;,x=a2;,y=b2;,11.1 位运算符,位复合赋值运算符,注意,位运算的类型可以是整型(,int,、unsigned,或,long,int,),或字符型(,char),数据。,当两个运算对象的类型不同时系统会自动进行如下处理:,两个运算对象按位右对齐;,较短的运算对象高位符号扩展;即如果是正数,高位补0,如果是负数,高位补1。,11.2 位段,位段结构类型,位段结构是一种构造类型,类型定义的方法为:,struct,类型名,基类型 位段名1:位段1占用位数;,基类型 位段名2:位段2占用位数;,;,基类型 位段名,n:,位段,n,占用位数;,;,11.2 位段,例如,,struct,status,unsigned a:2;,unsigned b:2;,unsigned c:3;,unsigned d:3;,unsigned e:1;,unsigned f:2;,unsigned g:3;,;,11.2 位段,位段结构类型变量的定义与引用,位段结构类型的变量,位段结构类型的变量的定义方法和其它变量定义方法一样。,例如利用上面定义的类型,status,可以定义变量,flag,,struct,status flag;,位段数据的引用,位段数据的引用方法和结构体成员的引用方式相同。,例如,,flag.a=2;flag.b=1;,如果所赋值超过了位段所允许的最大范围,系统会自动取数的低位。,关于位段的说明,位段的基类型必须,为,unsiged int,类型。,11.2 位段,可以将类型说明和变量说明一起完成。,struct,packed1,unsigned f1:4;,unsigned f2:2;,unsigned f3:2;,data1;,在位段结构中可以定义无名位段。无名位段起位段之间的分隔作用。,struct,packed2,unsigned f1:4;,unsigned f2:2;,unsigned :2;/*,无名位段,起分隔作用*/,unsigned f3:2;,data2;,11.2 位段,无名位段的长度可以为0,这时,下一个位段从下一个单元存放。,struct,packed3,unsigned f1:4;,unsigned f2:4;,unsigned :0;/*,无名位段长度为0*/,unsigned f3:2;,data3;,11.2 位段,一个位段必须存储在同一存储单元,不能横跨两个存储单元。如果一个单元空间不够,则系统从下一个单元起存放该位段。,struct,packed4,unsigned f1:8;,unsigned f2:4;,unsigned f3:6;/*,该位段从下一个单元起存放*/,unsigned f4:2;,data4;,11.2 位,段,在位段结构中,不一定必须是位段成员,也可以包含非位段成员。,struct,packed5,unsigned f1:4;,unsigned f2:4;,unsigned f3:4;,int,n;/*,非位段成员*/,data5;,位段可以在数值表达式中引用,并被系统自动转换成整型数。位段可以在表达式中引用,所以位段也可以以整型格式输出。例如:,printf,(“%d,%d”,data2.f1,data1.f2);,11.3应用举例,【,例11.10】取一个整数,a(,用16位存储)从右端开始的47位。,解:例如,0000,0000,1101,1001(八进制331,十进制217,47位1101的八进制值是15,十进制13)。方法:,先使,a,右移4位,使要取出的几位移到最右端。,a4,设置一个低4位全为1,其余为0 的数(0 4;/*,将,a,右移4位后赋值给变量,b*/,c=(0 4);/*,使低4位全为1,其余为0 */,d=b,printf,(“%on%on”,a,d);,11.3应用举例,【,例11.11】从键盘上输入一个十进制整数,统计该整数所对应的二进制数中1的个数。,分析:统计一个整数,m,中1的个数有两种方法。,方法1:,循环执行、,测试,m,的第0位是否为1,是则1的个数加1;,m,右移1位;,程序如下:,main(),int,i,count,m;,printf,(Please input m:);,scanf,(%d,count=0;,11.3应用举例,for(i=0;i1;,printf,(Numbers of 1 in m=%d,count);,方法2:,k=1;,循环执行、,测试,m,的第,k,位是否为1,是则1的个数加1;,k,左移1位。,11.3应用举例,程序如下:,main(),int,i,count,m,k;,printf,(Please input m:);,scanf,(%d,count=0;,k=1;,for(i=0;i=16;i+),if(m&k)!=0),count+;,k=k0111101111110101,(注意,不能直接使用运算符,因为,运算符使左面添0或添1。),方法如下:,将,a,的右端,n,位先放到中间变量,b,的高,n,位中。(左移16-,n,位),b=an;,将,c,与,b,进行按位或运算。,c=a|b,11.3应用举例,程序如下:,main(),unsigned a,b,c;,int,n;,scanf,(a=%o,n=%d,/*a,以八进制形式输入,右移位数以十进制形式输入*/,b=an;,c=c|b;,printf,(%on%o,a,c);/*,以八进制形式输出*/,11.3应用举例,【,例11.13】编写函数,leftloop,,,实现将16位数循环左移,n,位。,循环左移可以用下述方法实现:,将源操作数送入一中间变量;,将中间变量右移16-,n,位,使高端,n,位移至低端;,将源操作数左移,n,位;,用“按位或”运算将中间变量和源操作数合并在一起。,11.3应用举例,leftloop,(unsigned*value,int,n)/*value,是源操作数,,n,是移位位数*/,unsigned a,b;,a=*value(16-n);,b=*valuen;,*value=a|b;,main(),unsigned value,m;,printf,(Please input value and m:);,scanf,(%u,%u,/*value,是源操作数,,m,是移位位数*/,m=m%16;,/*,移位位数超过16时*/,leftloop,(,printf,(value=%un,value);,
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:第11章+位运算.ppt
    链接地址:https://www.zixin.com.cn/doc/13088344.html
    页脚通栏广告

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork