欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    第13章位操作精选文档.ppt

    • 资源ID:69585643       资源大小:1.95MB        全文页数:18页
    • 资源格式: PPT        下载积分:18金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要18金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第13章位操作精选文档.ppt

    第13章位操作本讲稿第一页,共十八页二进制位运算二进制位运算二进制位运算二进制位运算13.113.1教学进程教学进程教学进程教学进程 指对二进制位进行的运算。每个二进制位中只能存放指对二进制位进行的运算。每个二进制位中只能存放指对二进制位进行的运算。每个二进制位中只能存放指对二进制位进行的运算。每个二进制位中只能存放0 0或或或或1 1。通常,将一个数据用二进制数表示后,最右边的二进制位称为最低位通常,将一个数据用二进制数表示后,最右边的二进制位称为最低位通常,将一个数据用二进制数表示后,最右边的二进制位称为最低位通常,将一个数据用二进制数表示后,最右边的二进制位称为最低位(第(第(第(第0 0位),最左边的二进制位为最高位。位),最左边的二进制位为最高位。位),最左边的二进制位为最高位。位),最左边的二进制位为最高位。位运算位运算位运算位运算位位位位 运运运运 算算算算 符符符符意意意意 义义义义&|按位与按位与按位与按位与按位或按位或按位或按位或按位异或按位异或按位异或按位异或按位取反按位取反按位取反按位取反左移左移左移左移右移右移右移右移在在在在C C语言中共提供了六种位运算符语言中共提供了六种位运算符语言中共提供了六种位运算符语言中共提供了六种位运算符 在这六种位运算符中,其中按位在这六种位运算符中,其中按位在这六种位运算符中,其中按位在这六种位运算符中,其中按位取反是单目运算符,只有一个运算对象,取反是单目运算符,只有一个运算对象,取反是单目运算符,只有一个运算对象,取反是单目运算符,只有一个运算对象,其他均为双目运算符,有两个运算对象。其他均为双目运算符,有两个运算对象。其他均为双目运算符,有两个运算对象。其他均为双目运算符,有两个运算对象。位运算的运算对象只能是整型位运算的运算对象只能是整型位运算的运算对象只能是整型位运算的运算对象只能是整型(包括(包括(包括(包括intint,shortshort,longlong,unsignedunsigned)或)或)或)或字符型数据,而不能是实型数据。字符型数据,而不能是实型数据。字符型数据,而不能是实型数据。字符型数据,而不能是实型数据。注意注意注意注意本讲稿第二页,共十八页二进制位运算二进制位运算二进制位运算二进制位运算 优先级优先级优先级优先级教学进程教学进程教学进程教学进程!(!(逻辑非逻辑非逻辑非逻辑非)-)-按位取反按位取反按位取反按位取反 -算术运算符算术运算符算术运算符算术运算符 -左移运算符左移运算符左移运算符左移运算符-关系运关系运关系运关系运算符算符算符算符 -按位与按位与按位与按位与&、按位异或、按位异或、按位异或、按位异或、按位或、按位或、按位或、按位或|-&|-&与与与与|-|-赋值运算符赋值运算符赋值运算符赋值运算符“按位与按位与按位与按位与”运算符(运算符(运算符(运算符(&)规则规则规则规则 若两个运算对象的对应二进制位均是若两个运算对象的对应二进制位均是若两个运算对象的对应二进制位均是若两个运算对象的对应二进制位均是1 1,则结果的对应位,则结果的对应位,则结果的对应位,则结果的对应位 是是是是1 1,否则为,否则为,否则为,否则为0 0。即对应二进制位上可能的。即对应二进制位上可能的。即对应二进制位上可能的。即对应二进制位上可能的“按位与按位与按位与按位与”运算运算运算运算 组合为组合为组合为组合为 0&0=10&0=1,0&1=00&1=0,1&0=01&0=0,1&1=11&1=1例如,短整数(假设一个短整数占例如,短整数(假设一个短整数占例如,短整数(假设一个短整数占例如,短整数(假设一个短整数占8 8位二进制位,下同)位二进制位,下同)位二进制位,下同)位二进制位,下同)1313(十六进制表(十六进制表(十六进制表(十六进制表示为示为示为示为0 x0d0 x0d)与短整数)与短整数)与短整数)与短整数2121(十六进制表(十六进制表(十六进制表(十六进制表示为示为示为示为0 x150 x15)进行)进行)进行)进行“按位与按位与按位与按位与”如下:因如下:因如下:因如下:因此,此,此,此,13&21=513&21=5,即,即,即,即0 x0d&0 x15=0 x050 x0d&0 x15=0 x05。0 0 0 0 1 1 0 1 130 0 0 0 1 1 0 1 13的二进制数的二进制数的二进制数的二进制数(&)0 0 0 1 0 1 0 1 210 0 0 1 0 1 0 1 21的二进制数的二进制数的二进制数的二进制数 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 本讲稿第三页,共十八页“按位与按位与按位与按位与”运算符(运算符(运算符(运算符(&)13.1.113.1.1 特别要指出的是,如果参加特别要指出的是,如果参加特别要指出的是,如果参加特别要指出的是,如果参加“按位与按位与按位与按位与”运算的对象为负整数,则在运算的对象为负整数,则在运算的对象为负整数,则在运算的对象为负整数,则在 计算机中是以补码形式表示的。计算机中是以补码形式表示的。计算机中是以补码形式表示的。计算机中是以补码形式表示的。教学进程教学进程教学进程教学进程例如,短负整数例如,短负整数例如,短负整数例如,短负整数-13-13(二进制补码的十六进制表示为(二进制补码的十六进制表示为(二进制补码的十六进制表示为(二进制补码的十六进制表示为0 xf30 xf3)与短整数)与短整数)与短整数)与短整数2121(十六进制表示为(十六进制表示为(十六进制表示为(十六进制表示为0 x150 x15)进行)进行)进行)进行“按位与按位与按位与按位与”因此,因此,因此,因此,-13&21=17-13&21=17,即,即,即,即0 xf3&0 x15=0 x110 xf3&0 x15=0 x11。1 1 1 1 0 0 1 1 -131 1 1 1 0 0 1 1 -13的二进制数补码表示的二进制数补码表示的二进制数补码表示的二进制数补码表示 (&)0 0 0 1 0 1 0 1 210 0 0 1 0 1 0 1 21的二进制数补码(正数的补码是其本身)的二进制数补码(正数的补码是其本身)的二进制数补码(正数的补码是其本身)的二进制数补码(正数的补码是其本身)0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 本讲稿第四页,共十八页“按位与按位与按位与按位与”运算符(运算符(运算符(运算符(&)教学进程教学进程教学进程教学进程例如,如果要取整型变量例如,如果要取整型变量例如,如果要取整型变量例如,如果要取整型变量x x的低字节(即低八位),则可以作的低字节(即低八位),则可以作的低字节(即低八位),则可以作的低字节(即低八位),则可以作 如下运算:如下运算:如下运算:如下运算:x&0 xffx&0 xff。功能功能功能功能(1 1)取出数据中指定的位)取出数据中指定的位)取出数据中指定的位)取出数据中指定的位(2 2)将数据中的指定位清零)将数据中的指定位清零)将数据中的指定位清零)将数据中的指定位清零例如,为了将整型变量例如,为了将整型变量例如,为了将整型变量例如,为了将整型变量x x的第的第的第的第4 4位清零,则可以用如下赋值语句:位清零,则可以用如下赋值语句:位清零,则可以用如下赋值语句:位清零,则可以用如下赋值语句:x=x&0 xffefx=x&0 xffef;【例例例例1 1】编制一个编制一个编制一个编制一个C C程序,其功能是将正整型数组中所有元素转换为不程序,其功能是将正整型数组中所有元素转换为不程序,其功能是将正整型数组中所有元素转换为不程序,其功能是将正整型数组中所有元素转换为不 大于它的最大偶数,并显示输出。大于它的最大偶数,并显示输出。大于它的最大偶数,并显示输出。大于它的最大偶数,并显示输出。为了将一个正整数转换为不大于它的最大偶数,只需将该正整数所对为了将一个正整数转换为不大于它的最大偶数,只需将该正整数所对为了将一个正整数转换为不大于它的最大偶数,只需将该正整数所对为了将一个正整数转换为不大于它的最大偶数,只需将该正整数所对应的二进制数的最低位清零即可,即用应的二进制数的最低位清零即可,即用应的二进制数的最低位清零即可,即用应的二进制数的最低位清零即可,即用0 xfffe0 xfffe与该正整数作与该正整数作与该正整数作与该正整数作“按位与按位与按位与按位与”运算。运算。运算。运算。其其其其C C程序如下:程序如下:程序如下:程序如下:本讲稿第五页,共十八页“按位与按位与按位与按位与”运算符(运算符(运算符(运算符(&)教学进程教学进程教学进程教学进程#include stdio.h#include stdio.h main()main()int k int k,a10=23a10=23,1414,2424,3131,4646,5555,3333,6868,2727,4040;for(k=0for(k=0;k k1010;k k)printf(printf(5d5d,ak)ak);printf(n)printf(n);for(k=0for(k=0;k k1010;k k)ak=ak&0 xfffe ak=ak&0 xfffe;/*/*将正整数转换为不大于它的最大偶数将正整数转换为不大于它的最大偶数将正整数转换为不大于它的最大偶数将正整数转换为不大于它的最大偶数*/for(k=0 for(k=0;k k1010;k k)printf(printf(5d5d,ak)ak);printf(n)printf(n);上述程序的运行结果为上述程序的运行结果为上述程序的运行结果为上述程序的运行结果为 23 14 24 31 46 55 33 68 27 4023 14 24 31 46 55 33 68 27 40 22 14 24 30 46 54 32 68 26 40 22 14 24 30 46 54 32 68 26 40本讲稿第六页,共十八页“按位或按位或按位或按位或”运算符运算符运算符运算符(|)12.1.212.1.2教学进程教学进程教学进程教学进程“按位或按位或按位或按位或”运算符(运算符(运算符(运算符(|)规则规则规则规则 若两个运算对象的对应二进制位中有一个是若两个运算对象的对应二进制位中有一个是若两个运算对象的对应二进制位中有一个是若两个运算对象的对应二进制位中有一个是1 1,则结果的,则结果的,则结果的,则结果的对应位是对应位是对应位是对应位是1 1,否则为,否则为,否则为,否则为0 0。即对应二进制位上可能的。即对应二进制位上可能的。即对应二进制位上可能的。即对应二进制位上可能的“按位或按位或按位或按位或”运运运运算组合为算组合为算组合为算组合为 0|0=00|0=0,0|1=10|1=1,1|0=11|0=1,1|1=11|1=1例如,例如,例如,例如,短整数短整数短整数短整数1313(十六进制表示为(十六进制表示为(十六进制表示为(十六进制表示为0 x0d0 x0d)与短整数)与短整数)与短整数)与短整数2121(十六进制表示为(十六进制表示为(十六进制表示为(十六进制表示为0 x150 x15)进行)进行)进行)进行“按位或按位或按位或按位或”如下:如下:如下:如下:0 0 0 0 1 1 0 1 130 0 0 0 1 1 0 1 13的二进制数的二进制数的二进制数的二进制数 (|)0 0 0 1 0 1 0 1 210 0 0 1 0 1 0 1 21的二进制数的二进制数的二进制数的二进制数 0 0 0 1 1 1 0 1 0 0 0 1 1 1 0 1 因此,因此,因此,因此,13|21=2913|21=29,即,即,即,即0 x0d|0 x15=0 x1d0 x0d|0 x15=0 x1d。1 1 1 1 0 0 1 1 -131 1 1 1 0 0 1 1 -13的二进制数补码表示的二进制数补码表示的二进制数补码表示的二进制数补码表示 (|)0 0 0 1 0 1 0 1 210 0 0 1 0 1 0 1 21的二进制数补码(正数的补码是其本身)的二进制数补码(正数的补码是其本身)的二进制数补码(正数的补码是其本身)的二进制数补码(正数的补码是其本身)1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 因此,因此,因此,因此,-13|21=-9-13|21=-9,即,即,即,即0 xf3|0 x15=0 xf70 xf3|0 x15=0 xf7。短负整数短负整数短负整数短负整数-13-13(二进制补码的十六进制表示为(二进制补码的十六进制表示为(二进制补码的十六进制表示为(二进制补码的十六进制表示为0 xf30 xf3)与短整数)与短整数)与短整数)与短整数2121(十六进制表示为(十六进制表示为(十六进制表示为(十六进制表示为0 x150 x15)进行)进行)进行)进行“按位或按位或按位或按位或”本讲稿第七页,共十八页“按位或按位或按位或按位或”运算符(运算符(运算符(运算符(|)“按位或按位或按位或按位或”运算通常用于对一个数据的某些位置运算通常用于对一个数据的某些位置运算通常用于对一个数据的某些位置运算通常用于对一个数据的某些位置1 1,而其余位不变。,而其余位不变。,而其余位不变。,而其余位不变。教学进程教学进程教学进程教学进程例如,例如,例如,例如,要将整型变量要将整型变量要将整型变量要将整型变量x x的低字节(即低八位)置的低字节(即低八位)置的低字节(即低八位)置的低字节(即低八位)置1 1,而高字节(即高,而高字节(即高,而高字节(即高,而高字节(即高 八位)不变,则可以用如下赋值语句:八位)不变,则可以用如下赋值语句:八位)不变,则可以用如下赋值语句:八位)不变,则可以用如下赋值语句:x=x|0 x00ffx=x|0 x00ff;【例例例例2 2】编制一个编制一个编制一个编制一个C C程序,其功能是将正整型数组中所有元素转换程序,其功能是将正整型数组中所有元素转换程序,其功能是将正整型数组中所有元素转换程序,其功能是将正整型数组中所有元素转换 为不小于它的最小奇数,并显示输出。为不小于它的最小奇数,并显示输出。为不小于它的最小奇数,并显示输出。为不小于它的最小奇数,并显示输出。为了将一个正整数转换为不小于它的最小奇数,只需将该正整数为了将一个正整数转换为不小于它的最小奇数,只需将该正整数为了将一个正整数转换为不小于它的最小奇数,只需将该正整数为了将一个正整数转换为不小于它的最小奇数,只需将该正整数所对应的二进制数的最低位置所对应的二进制数的最低位置所对应的二进制数的最低位置所对应的二进制数的最低位置1 1即可,即用即可,即用即可,即用即可,即用0 x00010 x0001与该正整数作与该正整数作与该正整数作与该正整数作“按位按位按位按位或或或或”运算。其运算。其运算。其运算。其C C程序如下:程序如下:程序如下:程序如下:本讲稿第八页,共十八页“按位或按位或按位或按位或”运算符(运算符(运算符(运算符(|)教学进程教学进程教学进程教学进程#include stdio.h#include stdio.h main()main()int k int k,a10=23a10=23,1414,2424,3131,4646,5555,3333,6868,2727,4040;for(k=0for(k=0;k k1010;k k)printf(printf(5d5d,ak)ak);printf(n)printf(n);for(k=0for(k=0;k k1010;k k)ak=ak|0 x0001 ak=ak|0 x0001;/*/*将正整数转换为不小于它的最小奇数将正整数转换为不小于它的最小奇数将正整数转换为不小于它的最小奇数将正整数转换为不小于它的最小奇数*/for(k=0 for(k=0;k k1010;k k)printf(printf(5d5d,ak)ak);printf(n)printf(n);上述程序的运行结果为上述程序的运行结果为上述程序的运行结果为上述程序的运行结果为 23 14 24 31 46 55 33 68 27 4023 14 24 31 46 55 33 68 27 40 23 15 25 31 47 55 33 69 27 41 23 15 25 31 47 55 33 69 27 41本讲稿第九页,共十八页“按位异或按位异或按位异或按位异或”运算符(运算符(运算符(运算符()13.1.313.1.3教学进程教学进程教学进程教学进程“按位异或按位异或按位异或按位异或”运算符(运算符(运算符(运算符()规则规则规则规则 若两个运算对象的对应二进制位不相等,则结果的对应位若两个运算对象的对应二进制位不相等,则结果的对应位若两个运算对象的对应二进制位不相等,则结果的对应位若两个运算对象的对应二进制位不相等,则结果的对应位 是是是是1 1,否则为,否则为,否则为,否则为0 0。即对应二进制位上可能的。即对应二进制位上可能的。即对应二进制位上可能的。即对应二进制位上可能的“按位异或按位异或按位异或按位异或”运算运算运算运算 组合为组合为组合为组合为 00=000=0,01=101=1,10=110=1,11=011=0 1 1 1 1 0 0 1 1 -131 1 1 1 0 0 1 1 -13的二进制数补码表示的二进制数补码表示的二进制数补码表示的二进制数补码表示 ()0 0 0 1 0 1 0 1 210 0 0 1 0 1 0 1 21的二进制数补码(正数的补码是其本身)的二进制数补码(正数的补码是其本身)的二进制数补码(正数的补码是其本身)的二进制数补码(正数的补码是其本身)1 1 1 0 0 1 1 0 1 1 1 0 0 1 1 0 因此,因此,因此,因此,-1321=-26-1321=-26,即,即,即,即0 xf30 x15=0 xe60 xf30 x15=0 xe6。短负整数短负整数短负整数短负整数-13-13(二进制补码的十六进制表示为(二进制补码的十六进制表示为(二进制补码的十六进制表示为(二进制补码的十六进制表示为0 xf30 xf3)与短整数)与短整数)与短整数)与短整数2121(十六进制表示为(十六进制表示为(十六进制表示为(十六进制表示为0 x150 x15)进行)进行)进行)进行“按位异或按位异或按位异或按位异或”例如,例如,例如,例如,短整数短整数短整数短整数1313(十六进制表示为(十六进制表示为(十六进制表示为(十六进制表示为0 x0d0 x0d)与短整数)与短整数)与短整数)与短整数2121(十六进制表示为(十六进制表示为(十六进制表示为(十六进制表示为0 x150 x15)进行)进行)进行)进行“按位异或按位异或按位异或按位异或”如下:如下:如下:如下:0 0 0 0 1 1 0 1 130 0 0 0 1 1 0 1 13的二进制数的二进制数的二进制数的二进制数()0 0 0 1 0 1 0 1 210 0 0 1 0 1 0 1 21的二进制数的二进制数的二进制数的二进制数 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 因此,因此,因此,因此,1321=241321=24,即,即,即,即0 x0d0 x15=0 x180 x0d0 x15=0 x18。本讲稿第十页,共十八页“按位异或按位异或按位异或按位异或”运算符(运算符(运算符(运算符()教学进程教学进程教学进程教学进程性质性质性质性质 使数据中的某些位取反,即将使数据中的某些位取反,即将使数据中的某些位取反,即将使数据中的某些位取反,即将0 0变为变为变为变为1 1,1 1变为变为变为变为0 0。例如,要将整型变量例如,要将整型变量例如,要将整型变量例如,要将整型变量x x的低字节(即低八位)按位取反,的低字节(即低八位)按位取反,的低字节(即低八位)按位取反,的低字节(即低八位)按位取反,而高字节(即高八位)不变,则可以用如下赋值语句:而高字节(即高八位)不变,则可以用如下赋值语句:而高字节(即高八位)不变,则可以用如下赋值语句:而高字节(即高八位)不变,则可以用如下赋值语句:x=x0 x00ffx=x0 x00ff;同一个数据进行异或运算后,其结果为同一个数据进行异或运算后,其结果为同一个数据进行异或运算后,其结果为同一个数据进行异或运算后,其结果为0 0。利用异或运算。利用异或运算。利用异或运算。利用异或运算 的这个性质,可以将变量清零。的这个性质,可以将变量清零。的这个性质,可以将变量清零。的这个性质,可以将变量清零。例如,为了将整型变量例如,为了将整型变量例如,为了将整型变量例如,为了将整型变量x x清零,则可以用如下赋值语句:清零,则可以用如下赋值语句:清零,则可以用如下赋值语句:清零,则可以用如下赋值语句:x=xxx=xx;设设设设x x与与与与y y均为整型数据,则有均为整型数据,则有均为整型数据,则有均为整型数据,则有 (xy)y=x(xy)y=x利用利用利用利用“按位异或按位异或按位异或按位异或”的这个性质,可以实现交换两个整型变量的值:的这个性质,可以实现交换两个整型变量的值:的这个性质,可以实现交换两个整型变量的值:的这个性质,可以实现交换两个整型变量的值:x=xyx=xy;y=xyy=xy;x=xyx=xy;本讲稿第十一页,共十八页“按位取反按位取反按位取反按位取反”运算符(运算符(运算符(运算符()13.1.413.1.4教学进程教学进程教学进程教学进程“按位取反按位取反按位取反按位取反”运算符(运算符(运算符(运算符()将运算对象中的各二进制位值取反,即将将运算对象中的各二进制位值取反,即将将运算对象中的各二进制位值取反,即将将运算对象中的各二进制位值取反,即将0 0变为变为变为变为1 1,1 1变变变变 为为为为0 0。对应二进制位上可能的。对应二进制位上可能的。对应二进制位上可能的。对应二进制位上可能的“按位取反按位取反按位取反按位取反”运算组合为运算组合为运算组合为运算组合为 0=10=1,1=01=0例如,例如,例如,例如,对短整数对短整数对短整数对短整数1313(十六进制(十六进制(十六进制(十六进制表示为表示为表示为表示为0 x0d0 x0d)进行)进行)进行)进行“按位取反按位取反按位取反按位取反”运运运运算如下:算如下:算如下:算如下:()0 0 0 0 1 1 0 1 130 0 0 0 1 1 0 1 13的二进制数的二进制数的二进制数的二进制数 1 1 1 1 0 0 1 0 1 1 1 1 0 0 1 0 因此,因此,因此,因此,13=-1413=-14,即,即,即,即 0 x0d=0 xf20 x0d=0 xf2。规则规则规则规则左移左移左移左移”运算符(运算符(运算符(运算符()13.1.613.1.6教学进程教学进程教学进程教学进程“右移右移右移右移”运算符(运算符(运算符(运算符()将运算对象中的每个二进制位向右移动若干位,从右边将运算对象中的每个二进制位向右移动若干位,从右边将运算对象中的每个二进制位向右移动若干位,从右边将运算对象中的每个二进制位向右移动若干位,从右边 移出去的低位部分被丢弃。但左边空出的高位部分是移出去的低位部分被丢弃。但左边空出的高位部分是移出去的低位部分被丢弃。但左边空出的高位部分是移出去的低位部分被丢弃。但左边空出的高位部分是 补补补补0 0还是补还是补还是补还是补1 1,要视下列具体情况而定:,要视下列具体情况而定:,要视下列具体情况而定:,要视下列具体情况而定:若右移对象为无符号整型数,则右移后左边空出的高位部分补若右移对象为无符号整型数,则右移后左边空出的高位部分补若右移对象为无符号整型数,则右移后左边空出的高位部分补若右移对象为无符号整型数,则右移后左边空出的高位部分补0 0。一般来说,将整数算术右移一般来说,将整数算术右移一般来说,将整数算术右移一般来说,将整数算术右移k k位,相当于将该整数除以位,相当于将该整数除以位,相当于将该整数除以位,相当于将该整数除以2 2k k 。若右移对象为一般整型数或字符型数据,当该数据的最高位为若右移对象为一般整型数或字符型数据,当该数据的最高位为若右移对象为一般整型数或字符型数据,当该数据的最高位为若右移对象为一般整型数或字符型数据,当该数据的最高位为0 0(对于一般整型来说即为正数),则右移后左边空出的高位部分(对于一般整型来说即为正数),则右移后左边空出的高位部分(对于一般整型来说即为正数),则右移后左边空出的高位部分(对于一般整型来说即为正数),则右移后左边空出的高位部分补补补补0 0。当该数据的最高位为。当该数据的最高位为。当该数据的最高位为。当该数据的最高位为1 1(对于一般整型来说即为负数),则(对于一般整型来说即为负数),则(对于一般整型来说即为负数),则(对于一般整型来说即为负数),则与使用的计算机系统有关。在微机上使用的与使用的计算机系统有关。在微机上使用的与使用的计算机系统有关。在微机上使用的与使用的计算机系统有关。在微机上使用的Turbo CTurbo C系统中,属于系统中,属于系统中,属于系统中,属于“算术右移算术右移算术右移算术右移”。规则规则规则规则本讲稿第十三页,共十八页位段位段位段位段12.212.2教学进程教学进程教学进程教学进程 定义位段结构类型的一般形式为定义位段结构类型的一般形式为定义位段结构类型的一般形式为定义位段结构类型的一般形式为例如例如例如例如 struct packed_dstruct packed_d unsigned f1:2 unsigned f1:2;unsigned f2:1unsigned f2:1;unsigned f3:3unsigned f3:3;unsigned f4:2unsigned f4:2;unsigned f5:5unsigned f5:5;struct struct 位段结构类型名位段结构类型名位段结构类型名位段结构类型名 成员表成员表成员表成员表 ;struct packed_dstruct packed_d unsigned f1:2 unsigned f1:2;unsigned f2:1unsigned f2:1;unsigned f3:3unsigned f3:3;unsigned f4:2unsigned f4:2;unsigned f5:5unsigned f5:5;xx,y y;可以在定义位段结构类型的同时定义该类型的变量可以在定义位段结构类型的同时定义该类型的变量可以在定义位段结构类型的同时定义该类型的变量可以在定义位段结构类型的同时定义该类型的变量structstruct unsigned f1:2 unsigned f1:2;unsigned f2:1unsigned f2:1;unsigned f3:3unsigned f3:3;unsigned f4:2unsigned f4:2;unsigned f5:5unsigned f5:5;xx,y y;可以直接定义位段结构类型的变量可以直接定义位段结构类型的变量可以直接定义位段结构类型的变量可以直接定义位段结构类型的变量 定义了位段结构类型后,就可以定义位段结构类型的变量。定义了位段结构类型后,就可以定义位段结构类型的变量。定义了位段结构类型后,就可以定义位段结构类型的变量。定义了位段结构类型后,就可以定义位段结构类型的变量。例如,例如,例如,例如,struct packed_d xstruct packed_d x,y y;本讲稿第十四页,共十八页位段位段位段位段 在对位段进行赋值时,要考虑到该位段所占用的二进制位数,如果在对位段进行赋值时,要考虑到该位段所占用的二进制位数,如果在对位段进行赋值时,要考虑到该位段所占用的二进制位数,如果在对位段进行赋值时,要考虑到该位段所占用的二进制位数,如果 所赋的数值超过了位段的表示范围,则自动取其低位数字。所赋的数值超过了位段的表示范围,则自动取其低位数字。所赋的数值超过了位段的表示范围,则自动取其低位数字。所赋的数值超过了位段的表示范围,则自动取其低位数字。教学进程教学进程教学进程教学进程 1 1)位段成员的类型必须是)位段成员的类型必须是)位段成员的类型必须是)位段成员的类型必须是unsignedunsigned型。型。型。型。2 2)在位段结构类型中,可以定义无名位段,这种无名位段具有位段)在位段结构类型中,可以定义无名位段,这种无名位段具有位段)在位段结构类型中,可以定义无名位段,这种无名位段具有位段)在位段结构类型中,可以定义无名位段,这种无名位段具有位段 之间的分隔作用。无名位段所占用的空间不起作用。之间的分隔作用。无名位段所占用的空间不起作用。之间的分隔作用。无名位段所占用的空间不起作用。之间的分隔作用。无名位段所占用的空间不起作用。如果无名位段的宽度值为如果无名位段的宽度值为如果无名位段的宽度值为如果无名位段的宽度值为0 0,则表示下一个位段从一个新的字节,则表示下一个位段从一个新的字节,则表示下一个位段从一个新的字节,则表示下一个位段从一个新的字节 开始存放。开始存放。开始存放。开始存放。3 3)每个位段(成员)所占的二进制位数一般不能超过一个机器字长。)每个位段(成员)所占的二进制位数一般不能超过一个机器字长。)每个位段(成员)所占的二进制位数一般不能超过一个机器字长。)每个位段(成员)所占的二进制位数一般不能超过一个机器字长。4 4)位段不能说明为数组,也不能用指针指向位段。)位段不能说明为数组,也不能用指针指向位段。)位段不能说明为数组,也不能用指针指向位段。)位段不能说明为数组,也不能用指针指向位段。5 5)在位段结构类型定义中,可以包含非位段成员。)在位段结构类型定义中,可以包含非位段成员。)在位段结构类型定义中,可以包含非位段成员。)在位段结构类型定义中,可以包含非位段成员。6 6)位段结构体类型变量中的位段成员可以在一般的表达式中被引用,)位段结构体类型变量中的位段成员可以在一般的表达式中被引用,)位段结构体类型变量中的位段成员可以在一般的表达式中被引用,)位段结构体类型变量中的位段成员可以在一般的表达式中被引用,并被自动转换为相应的整数。并被自动转换为相应的整数。并被自动转换为相应的整数。并被自动转换为相应的整数。问题问题问题问题本讲稿第十五页,共十八页程序举例程序举例程序举例程序举例13.313.3教学进程教学进程教学进程教学进程【例例例例3 3】编写一个编写一个编写一个编写一个C C程序,其功能是:从键盘输入一个无符号整数程序,其功能是:从键盘输入一个无符号整数程序,其功能是:从键盘输入一个无符号整数程序,其功能是:从键盘输入一个无符号整数mm以及以及以及以及位移位数位移位数位移位数位移位数n n,当,当,当,当n n0 0时,将时,将时,将时,将mm循环右移循环右移循环右移循环右移n n位,当位,当位,当位,当n n0 0时,将时,将时,将时,将mm循环左移循环左移循环左移循环左移|n|n|位。位。位。位。首先用首先用首先用首先用sizeof()sizeof()函数确定一个无符号整数所占的二进制位数函数确定一个无符号整数所占的二进制位数函数确定一个无符号整数所占的二进制位数函数确定一个无符号整数所占的二进制位数k k。如果是循环右移,则先将如果是循环右移,则先将如果是循环右移,则先将如果是循环右移,则先将mm右移右移右移右移n n位(即将原数的高位(即将原数的高位(即将原数的高位(即将原数的高k-nk-n位移到低位移到低位移到低位移到低位),再将位),再将位),再将位),再将mm左移左移左移左移k-nk-n位(即将原数的低位(即将原数的低位(即将原数的低位(即将原数的低n n位移到高位),然后将它们作位移到高位),然后将它们作位移到高位),然后将它们作位移到高位),然后将它们作按位或运算(即将它们合并)。按位或运算(即将它们合并)。按位或运算(即将它们合并)。按位或运算(即将它们合并)。如果是循环左移,则先将如果是循环左移,则先将如果是循环左移,则先将如果是循环左移,则先将mm左移左移左移左移n n位(即将原数的低位(即将原数的低位(即将原数的低位(即将原数的低k-nk-n位移到高位移到高位移到高位移到高位),再将位),再将位),再将位),再将mm右移右移右移右移k-nk-n位(即将原数的高位(即将原数的高位(即将原数的高位(即将原数的高n n位移到低位),然后将它们作位移到低位),然后将它们作位移到低位),然后将它们作位移到低位),然后将它们作按位或运算(即将它们合并)。按位或运算(即将它们合并)。按位或运算(即将它们合并)。按位或运算(即将它们合并)。将一个无符号整数将一个无符号整数将一个无符号整数将一个无符号整数mm循环移循环移循环移循环移n n位的方法如下:位的方法如下:位的方法如下:位的方法如下:本讲稿第十六页,共十八页程序举例程序举例程序举例程序举例教学进程教学进程教学进程教学进程 moveright(unsigned mmoveright(unsigned m,int n)int n)unsigned z unsigned z;int kint k;k=8*sizeof(unsigned)k=8*sizeof(unsigned);z=(mn)|(mn)|(m(k-n);return(z)return(z);moveleft(unsigned m moveleft(unsigned m,int n)int n)unsigned z unsigned z;int kint k;k=8*sizeof(unsigned)k=8*sizeof(unsigned);z=(m(k-n)z=(m(k-n);return(z)return(z);#include stdio.h#include stdio.h main()main()unsigned m unsigned m;int nint n;printf(input m:)printf(input m:);scanf(“scanf(“x”x”,&m)&m);/*/*输入被移无符号整输入被移无符号整输入被移无符号整输入被移无符号整 数数数数*/printf(input n:)printf(input n:);scanf(scanf(dd,&n)&n);/*/*输入位移量输入位移量输入位移量输入位移量*/if(n if(n0)/*0)/*循环右移循环右移循环右移循环右移*/printf(moveright=printf(moveright=xnxn,moveright(mmoveright(m,n)n);else /*else /*循环左移循环左移循环左移循环左移*/printf(moveleft=printf(moveleft=xnxn,moveleft(mmoveleft(m,-n)n);将将mm循环右移循环右移n n位位将将mm循环左移循环左移n n位位本讲稿第十七页,共十八页程序举例程序举例程序举例程序举例 教学进程教学进程教学进程教学进程#include stdio.h#include stdio.h struct packed_bit struct packed_bit unsigned a:2 unsigned a:2;unsigned b:3unsigned b:3;unsigned c:4unsigned c:4;int kint k;xx;main()main()x.a=1 x.a=1;x.b=2x.b=2;x.c=3x.c=3;x.k=10 x.k=10;printf(printf(dndn,x)x);printf(printf(dndn,x.k)x.k);【例例例例4 4】设位段的设位段的设位段的设位段的 空间分配是从右到左空间分配是从右到左空间分配是从右到左空间分配是从右到左 的(即从低位到高的(即从低位到高的(即从低位到高的(即从低位到高 位),指出下列位),

    注意事项

    本文(第13章位操作精选文档.ppt)为本站会员(石***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开