C语言程序设计第11章xg.ppt

第11章 位运算,学习内容指南11.1 位运算符和位运算,11.2 位段,11.3 位运算应用举例,11.1 位运算符和位运算,由于是对二进制位进行与,或和异或等操作,因此,将位运算称作按位运算。,六种位运算符, 按位与 按位取反 | 按位或 右移,定义直接对二进制位进行的运算称作位运算。位运算只能对整型数据或者字符型数据进行运算,而不能对浮点型等其他数据类型进行操作,而且均以补码形式参与运算。,只有按位取反运算符是单目运算符其他均为双目运算符,“”定义 参加运算的两个数据,按二进制位进行逻辑与运算。即,如果两个相应的二进制位都为,则该位的结果值为;否则为0。,按位与运算符“”,例求5 6。 解5的二进制是101,6对应的二进制是110。在C语言中,5和6都是整型常量,因此可以进行位运算。即 0000 0000 0000 0101 0000 0000 0000 0110 0000 0000 0000 0100,运行结果 c4,include void main int a 5 , b 6 , c ; c a ,如果将一个存储单元(1个字节,8个二进制位)清零,则将该存储单元的数据与0进行运算就可以。,1. 将存储单元清零,例如果某存储单元的内容是十进制的整数10,通过运算将该存储单元清零。 解将该单元的内容10与0进行运算,结果送回该单元即可如下计算即 0000 1010 0000 0000 0000 0000,按位与运算作用,include void main char a 10 ; a a ,若要保留整数a中连续或不连续的某1位或某几位数,则将其整数b进行运算,并且将b中对应位(a中要保留的二进制位)置为1,其他置为0即可。,2.保留一个数中某些指定位,如a对应的二进制是0100 1111,要把左数第1,2,3,5位保留下来,则令b中左数,1,2,3,5位为1,其他为0,即b为1110 1000。如下计算即 0100 1111 1110 1000 0100 1000,按位与运算作用,除上述两个应用以外,按位与运算还可以用来判断某个数的奇偶性,在此不再赘述。,“|”定义 参加运算的两个数据,按二进制位进行逻辑或运算。即,如果两个相应的二进制位只要有一个为1,则该位的结果值为1;否则为0。,按位或运算符“|”,例求5 | 6。 解5对应的二进制是101,6对应的二进制是110。在C语言中,5和6都是整型常量,5 | 6的计算如下即 0000 0000 0000 0101 | 0000 0000 0000 0110 0000 0000 0000 0111,include void main int a 5 , b 6 , c ; c a | b ; printf “dn“ , c ; ,按位或运算作用,如想使一个数的低位全为,只需将与 0000 0000 0000 1111进行按位或运算即可,即 a | 15。如果a 10,则计算过程如下 0000 0000 0000 1010 | 0000 0000 0000 1111 0000 0000 0000 1111,按位或运算常用来对一个数据的某些位定值为,并保持其他位不变。,“”定义 参加运算的两个数据,两个二进制位相同则结果为,不同则结果为。,按位异或运算符“”,例如 0011 1001 0010 1010 0001 0011 即071 052 023 (八进制数)。,例如0011 1001 0011 1001 0000 0000 1111 1111 0011 1001 1100 0110 即071 0 071 (八进制数) 071 0377 0306(八进制数),通过按位异或运算规则可以看出,一个数与0进行按位异或运算,值不变;与各个二进制位均为1的整数进行异或运算,则各个位进行翻转(将1变为0,而将0变为1.,1.将某些指定位翻转,按位异或运算作用,如将a的某些指定位进行翻转,则将a与b进行按位异或操作,b中对应位(a中指定的二进制位)均为1,其他位为0即可。设有0011 1001,想使其低位翻,可以将它与0000 1111进行按位异或运算。 0011 1001 0000 1111 0011 0110 即071 017 066(八进制数),按位异或运算作用,2. 用于简单的加密解密,如果一个数与本身进行按位异或操作,则值为0。 0011 1001 0011 1001 0000 0000 即071 071 0(八进制数)。又知道一个数与0按位异或操作,值不变。因为bb的值为0,所以abb的值仍为a,因此可以利用这一特点进行加密解密。,“”定义 按位取反运算是将一个数的各二进制位进行取反操作,即1变为0,0变为1。,按位取反运算符“”,例如对071进行按位取反运算 0011 1001 1100 0110 即0710306。,定义 左移运算是将一个数的各二进制位全部左移若干位,高位左移后溢出舍弃,低位进行补0。,左移运算符,例如,a15,对应的二进制是0000 1111,则a2的值是0011 1100,即十进制60。,左移时,如果溢出的高位中不含有1,则左移n位,相当于乘以2n。例如,a15,则左移2位的值为60,相当于15*22。移位运算是对底层二进制进行的运算,所以比乘法的速度要快得多。因此程序中乘以2n的操作,要尽量使用移位操作以提高处理速度。,定义 与左移运算相似,右移运算是将一个数的各二进制位全部右移若干位,低位右移后舍弃,但是高位进行补0或1。,右移运算符,对于无符号型整数和有符号型整数中的正数,右移时,高位补0,且右移n位相当于除以2n。 例如a15,对应的二进制是0000 1111,则a2的值是0000 0011,即相当于15/4,由于是两个整数相除,结果还是整型数,值为3。,对于有符号型整数中的负数,TC 3.0环境下,采用“算术右移”方式,即高位补1。有些系统则采用“逻辑右移”方式,即高位补0。,总结,以上是6种位运算的运算规则,而且双目运算都是在数据长度相等的情况下进行的。 如果长度不同,则需要将较短的数据进行补位,使之与较长数据的位数相同。 如果较短的数据是无符号型整数或者是有符号型整数中的正数,则左边补满0 如果较短的数据是有符号型整数中的负数,则左边补满1。,11.2 位段程序设计中,某些变量只占有1个或几个二进制位,因此使用char类型或其他类型进行存储,会造成内存的浪费。为了节省内存空间,引入了位段的概念。,位段定义 位段也称位域。将一个字节划分为几段,分别用来存储几个不同的变量,其中每段称作是一个位段。位段的划分使用结构体进行描述,称作位段结构体,其中每个成员描述一个位段的使用情况。位段,下面的例子,声明了名为struct bf的位段结构体类型,同时定义了位段结构体变量data,data struct bf int a 8 ; int b 2 ; int c 6 ; data ;,此结构体描述解决了3个整型变量的节省内存方式,即a占8位、b占2位而c占6位内存。共节省了4个字节,位段,位段结构体的声明还需要注意以下几点 从位段的定义中可以知道,每个位段一定都小于等于8位,且一个位段必须存储在同一个字节中,不能跨两个字节。如一个字节所剩空间不足以存放另一位段时,应从下一单元起存放该位段。也可以使用空段强制使下一位段从下一字节开始。 位段可以无位段名,此时它只用来作填充或调整位置.无名的位段是不能使用的。,11.3 位运算应用举例,例编写程序,模拟8个流水灯逐个闪动一次。,解用8位二进制来表示八盏灯,用1表示该位二进制对应的灯亮,用0表示该位二进制对应的灯灭。使用LED保存每次控制结果,例如若LED的二进制值为0010 0110,则表示二进制位为1的三盏灯亮,其他灯灭。程序中不能直接对二进制数进行处理,所以在处理位运算时,需要将二进制数转换为八进制、十进制或十六进制。对于本题目,由于处理的是8个二进制位,所以将其转换成十六进制处理起来更加容易,如0010 0110,就可以转换为0 x26。,include “stdio.h“ void main unsigned char p 0 xff ; unsigned temp 0 x80 ; unsigned char LED ; int i ; for i 0 ; i 1 ; printf “0 xx “ , LED ; ,运行结果 0 x80 0 x40 0 x20 0 x10 0 x8 0 x4 0 x2 0 x1,

c语言第11章ppt,C语言程序设计第11章xg.ppt相关推荐

  1. C语言教辅书答案,《C语言程序设计上机指导与习题解答》任正云 主编;李素若_孔网...

    本书是中国水利水电出版社出版的<C语言程序设计>的配套教材.书中内容分三个部分,第一部分是"C语言上机指南",这部分介绍了Turbo C 2.0.Turbo C++ 3 ...

  2. c语言第1章ppt,c语言第1章课件.ppt

    <c语言第1章课件.ppt>由会员分享,可在线阅读,更多相关<c语言第1章课件.ppt(30页珍藏版)>请在人人文库网上搜索. 1.第1章 C语言概述,计算机中心,C 语言程序 ...

  3. c语言指定外设访问宽度 强制,《C语言程序设计》第2章 简单的C程序设计.ppt

    <<C语言程序设计>第2章 简单的C程序设计.ppt>由会员分享,可在线阅读,更多相关<<C语言程序设计>第2章 简单的C程序设计.ppt(71页珍藏版)&g ...

  4. c语言程序设计教程北京大学,C语言程序设计教程北京大学第章ppt课件.ppt

    <C语言程序设计教程北京大学第章ppt课件.ppt>由会员分享,可在线阅读,更多相关<C语言程序设计教程北京大学第章ppt课件.ppt(31页珍藏版)>请在人人文库网上搜索. ...

  5. c语言中二维数组中维数的计算,数组指针字符串C语言程序设计-第4章.ppt

    <数组指针字符串C语言程序设计-第4章.ppt>由会员分享,可在线阅读,更多相关<数组指针字符串C语言程序设计-第4章.ppt(132页珍藏版)>请在人人文库网上搜索. 1.程 ...

  6. 画出识别c语言注释的转换图,C语言程序设计基础与实训教程》第1章:基础知识.ppt...

    <C语言程序设计基础与实训教程>第1章:基础知识.ppt>由会员分享,可在线阅读,更多相关<C语言程序设计基础与实训教程>第1章:基础知识.ppt(25页珍藏版)> ...

  7. c语言程序设计第2章,C语言程序设计第2章 结构化程序设计与算法.ppt

    C语言程序设计第2章 结构化程序设计与算法.ppt 现在人们公认的具有"良好风格"的程序设计方法之一是所谓的"结构化程序设计方法".其核心是规定了算法的三种基本 ...

  8. c语言程序设计教程第三版答案9.5,C语言程序设计-第5-9章习题解答.ppt

    C语言程序设计-第5-9章习题解答 华中科技大学计算机学院 C语言程序设计 第5-9章 部分习题解答 作业中问题较多的习题 第5章5.4(2) 第6章6.1,6.3,6.5(6),6.8 第7章无 第 ...

  9. c语言中置逆三位正整数,C语言程序设计 – 第 05 章课后习题(11页)-原创力文档...

    C 语言程序设计 – 第五章课后习题 电子13-02 班 王双喜 2014 年4 月12 日星期六 Made by xkwy. 1/11 语言程序设计 第五章课后习题 C – 13-02 电子 班 王 ...

  10. 一台计算机安装了fortran语言,第一章计算机Fortran语言简介精要.ppt

    第一章计算机Fortran语言简介精要.ppt 第1章 计算机与Fortran语言简介 知道计算机的基本构造 理解二进制系统 Fortran的历史和现状 内容简介: 1.1 计算机 CPU (cent ...

最新文章

  1. backbonejs中的模型篇(三)
  2. 关于生成随机数的疑点
  3. Elastic 使用Heartbeat监测服务运行状态
  4. android开发相关资料整理【2011-10-29】
  5. 2021年春季学期期末统一考试 成本管理 试题
  6. CSS基础知识(display和visibility、overflow、文档流)
  7. centos pip命令安装mysql_centos下pip安装mysql_python报错mysql_config not found
  8. 昔日国产手机巨头突然复出发两款新机 网友:回来当炮灰吗?
  9. 笨笨-歌词伴侣V1.2(酷狗KRC转LRC,LRC歌词批量下载)
  10. 平均绝对误差(MAE)、对数平均绝对误差(LMAE)、指数平均绝对误差(EMAE)用法的不同与相似之处
  11. i.MX 8M Mini sai_low_power_audio
  12. XCTF-MFW Git泄露,命令执行漏洞 详解
  13. 【Python基础】对象的浅拷贝与深拷贝
  14. JS 监听 storage
  15. Java小白踩坑录 - Shadowing Obscuring 揭秘
  16. 第三章微分中值定理及导数应用(方程的根)
  17. java第一个程序编译失败,零基础java第一个程序HelloWorld,编译,环境变量,运行,注释...
  18. 【java】猜字游戏
  19. Elementary effect
  20. [黑马程序员课程记录]C++基础部分4

热门文章

  1. 【2017 United Kingdom and Ireland Programming Contest (UKIEPC 2017)】Knightsbridge Rises【最大流+路径输出】
  2. VB 显示当前时间 24小时制
  3. android 修改系统参数设置,Android获取与设置系统环境变量的方法指南
  4. 对短链接服务暴露的URL进行网络侦察
  5. WebShell脚本检测机器学习一
  6. 使用Quartz做定时器
  7. 学习PyQt5(四):PyQt5的控件Spacers
  8. linux模拟http请求命令
  9. 基于线程池技术的web服务器
  10. mssql sqlserver 使用sql脚本 清空所有数据库表数据的方法分享