




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第九章 位运算,9.1 位运算的概念 9.2 位运算 9.3 位段简介,C语言具有汇编语言所能完成的一些功能,这是C语言的重要特色。 在计算机用于检测控制领域中要用到位运算,因此要学习和掌握本章内容。 9. 1 位运算的概念 位运算 进行二进制位的运算 。C 语言提供的位运算符如下表。,第十二章 位运算,说明: 位运算符中除了 以外,均为二目(元)运算符,即要求两侧各有一个运算量。 运算量只能是整型或字符型数据,不能为实型数据 。,9.2 位运算, 用途 : 清零:用 0 去“与”某一位,使该位清零。 如想将一个单元清零,即使其全部二进制位为0,只要找一个二进制数,其中各个位符合以下条件:原来
2、数中为1 的位,新数中相应位为0,然后使二者进行 b=b a ; a=a b ; 假设a=011,b=100. 请验证上述式子。,b=b (a b) =b a b =a b b=a a=(a b) a =a b a=b a a=b,对一个二进制数按位取反 ( 0 1 , 1 0 )。 例如 : 0 0 0 1 1 0 0 1 1 1 1 0 0 1 1 0 又如 : 若一个整数 a 为16 位,要使 a 最低一位为 0,可以用 a= a 若 a = 0 0 0 1 1 0 1 1 (左移二位) 若 a=15 , a 二进制数为 0 0 0 0 1 1 1 1 a 左移2 位为 0 0 1 1
3、1 1 0 0 其值为 60。 左移2 位 相当于 乘以 22 =4,但此结论只适用于左移时被溢出舍弃的高位中不包含1 的情况。(见下表),左移比乘法运算速度快得多,有些C 编译程序自动将乘 2 的运算用左移一位来实现,将乘 2n 的幂运算处理为左移 n 位。,9.2.5 (左移运算符),9.2.7 位运算赋值运算 位运算符与赋值运算符可以组合成复合赋值运算符位运算赋值运算符。如 : (右移二位 ),若 a=016 a 二进制数为 0 0 0 0 1 1 1 0,a 右移二位为 0 0 0 0 0 0 1 1 a:1001011111101101 a1:0100101111110110(逻辑右
4、移) a1:1100101111110110(算术右移) 右移一位,相当于除以2, 右移n 位,相当于除以 2n ,运算速度快得多。,对内存中信息的存取一般以字节为单位。实际上,有时存储一个信息不必用一个或多个字节,例如,“真”或“假”用0 或1 表示,只需 1 位 即可。可以在一个字节中存放几个信息,实现的方法有: 1. 人为地在一个字节中设几项,使得这几项分别占据该字节中的某几位。 例如,在data 中,设a、b、c、d 分别占 2 位、6 位、4 位、4 位,对其中的某一项 c 赋值 12 时,需要以下操作: 将字节中c 项的对应位清零:data=data unsigned b : 6
5、; unsigned c : 4 ; unsigned d : 4 ; int i ; data ;,注意:各个位段分配方向(从左到右或从右到左),因机器而异。,也可以使各个位段不恰好占满一个字节,例如: struct packed unsigned a : 2 ; unsigned b : 3 ; unsigned c : 4 ; int i; ; struct packed data ;,位段中成员引用的方法 : data . a=2 ; data . b=7 ; data . c=9 ; 注意各个位段的数值范围。,关于定义和引用字段的几点说明 : 位段成员的类型必须指定为 unsigne
6、d int 类型 ; 若一个字段要从另一个字开始存放,可以用以下形式定义 : struct packed unsigned a : 1 ; unsigned b : 2 ; unsigned : 0 ; unsigned c : 3 ; (分配在另一个存储单元) ; 本来a、b、c 应连续存放在一个存储单元(字)中,用了长度为 0 的位段,其作用是使下一个位段从下一个存储单元开始存放,所以 c 放在另一个存储单元中。,表示后面位不用,占一个存储单元, 一个位段必须存储在同一个存储单元中,不能 跨两个单元 。 如果第一个单元空间不能容纳下 一个位段,则该空间不用,而从下一个单元起存放该位段。,
7、可以定义无名字段 ,如: struct unsigned a : 1 ; unsigned : 2 ; (这二位不用,即空二位) unsigned b : 3 ; unsigned c : 4 ; ; 位段的长度不能大于存储单元的长度,也不能定义位段数组。 位段可以用整型形式输出,如 : printf( %d , %d , %d , data.a , data.b , data.c) ; 也可以用 % o、 % u、 % x 格式输出。 位段可以在数值表达式中引用,它会被系统自动转换成整型数据。 如运算data.a + data.b ;是合法的。,例12.1 取一个整数 a 从低端开始的 4
8、7 位(即第4 位至第7位的4 位)。 分析讨论: (1) 使 a 右移4 位(目的是使 a 的第4 位右移到第0位) b= a 4 (2) 设置一个右端4 位全为1 其余全为 0 的数, 方法是: (04) (见下面所示) 0:1111.111111 04:1111.110000 (左移4位) c= ( 04):0000.001111 (按位取反) (3) 将上述两个数进行 与低 4 位为 1 的数进行 scanf(% o, ,12.2 位运算举例,例12.2 整数 a 循环右移 n 位 (1) 将 a 右端 n 位先放到 b中的左端 n 位 b=an (3) 将 c与 b按位或 c | b,main( ) un
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 体育单招考试试题及答案
- 2025年中国外资经济行业发展趋势及投资前景预测报告
- 2025年中国聚氨酯夹芯板行业市场发展监测及投资策略研究报告
- 中国数控车床行业市场发展现状及前景趋势与投资分析研究报告(2024-2030)
- 2025年中国电视购物未来趋势预测分析及投资规划研究建议报告
- 焊接件项目投资立项报告
- 海曙区电业局南侧地块可行性分析报告
- 2025年中国座椅调节滑槽行业市场发展前景及发展趋势与投资战略研究报告
- 2025年中国智能协作机器人行业发展趋势及投资前景预测报告
- 中国分体式液晶电解水机项目投资可行性研究报告
- GB/T 18380.13-2022电缆和光缆在火焰条件下的燃烧试验第13部分:单根绝缘电线电缆火焰垂直蔓延试验测定燃烧的滴落(物)/微粒的试验方法
- 中国铂族金属供需发展趋势
- 国外发票模板invoice
- 计量分中心在供电公司工作会议上的表态发言(4篇)
- GB 19304-2018食品安全国家标准包装饮用水生产卫生规范
- 风电施工合同模板
- 小学英语素材-1-5年级英语牛津词汇表(带音标) 牛津上海版
- 2022年重庆出版集团有限公司招聘笔试试题及答案解析
- DB11-T1836-2021 城市桥梁工程施工技术规程高清最新版
- 大猪料配方设计思路课件
- 川崎病课件讲稿
评论
0/150
提交评论