




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、新编c语言程序设计教程 清华大学出版社周二强 软件学院 计算机科学与工程系配套视频:配套视频: 博客:博客: 位运算位运算u12.1 12.1 位操作符位操作符 12.1.1 按位与操作符& 12.1.2 按位或操作符 12.1.3 异或操作符 12.1.4 取反操作符 12.1.5 左移操作符u12.2 12.2 位运算示例位运算示例u12.3 12.3 位段位段位运算u位运算是指按二进制位进行的运算,实际上就是直接对整数位运算是指按二进制位进行的运算,实际上就是直接对整数在内存中的二进制位进行操作。在内存中的二进制位进行操作。u考虑这样的问题:编程控制编号为考虑这样的问题:编程控制
2、编号为0 0至至7 7的八盏灯的开关。的八盏灯的开关。u可以定义一个长度为可以定义一个长度为8 8的短整型数组变量的短整型数组变量a a。u可以定义一个无符号的字符型变量可以定义一个无符号的字符型变量c c。u如果如果c c的值为的值为128128(1000 00001000 0000),则),则7 7号灯亮,其余灯灭;为号灯亮,其余灯灭;为192192时(时(1100 00001100 0000),则),则6 6号和号和7 7号灯亮,其余的灭。号灯亮,其余的灭。u但是要改变某盏灯的状态而不影响其他灯的,却并非易事。但是要改变某盏灯的状态而不影响其他灯的,却并非易事。位操作符uc c语言提供的
3、位操作符有按位与语言提供的位操作符有按位与& &、按位或、按位异或、按位或、按位异或 、取反、取反 、左移、左移。u位操作符的操作数仅限整型(字符型),位操作符的操作数仅限整型(字符型),u为简明下面示例中位操作符的操作数多为字符型。为简明下面示例中位操作符的操作数多为字符型。return12.1.1 12.1.1 按位与操作符按位与操作符& &u按位与操作符按位与操作符& &将参与运算的两个操作数,按二位进制将参与运算的两个操作数,按二位进制位进行位进行“与与”运算。与运算时,如果两个二进制位上的数运算。与运算时,如果两个二进制位上的数均为均为
4、1 1 ,则运算结果的相应位为,则运算结果的相应位为1 1,否则运算结果的相应,否则运算结果的相应位为位为0 0。即。即u1 & 1 = 11 & 1 = 1、1 & 0 = 01 & 0 = 0、0 & 1 = 00 & 1 = 0、0 & 0 = 00 & 0 = 0u例如:例如:char a = -2, b = 3char a = -2, b = 3,则,则a & ba & b的值为的值为2 2。按位与操作符&u从按位与操作符从按位与操作符& &的运算规则可知,利用按位与操作符的运算规
5、则可知,利用按位与操作符& &可以很容易地在不影响其它位的情况下将一个整数的某位可以很容易地在不影响其它位的情况下将一个整数的某位设置为设置为0 0。u例如,无符号字符型例如,无符号字符型c c的值为的值为165165(1010 01011010 0101),即现),即现在是第在是第0 0、2 2、5 5、7 7号灯亮。需熄灭第七号灯时,号灯亮。需熄灭第七号灯时,u只要让只要让c c与与0 x7f0 x7f(0111 11110111 1111)进行按位与运算即可。)进行按位与运算即可。注意:u1. 1. 按位与操作符也可以构成复合赋值操作符,即按位与操作符也可以构成复合赋值操
6、作符,即c = c c = c & 0 x7f& 0 x7f可改写为可改写为c &= 0 x7fc &= 0 x7f。u2. 2. 利用按位与操作符对整型变量利用按位与操作符对整型变量a a的各位进行取舍时,的各位进行取舍时,如果保留某位的值,则另一操作数的对应位值为如果保留某位的值,则另一操作数的对应位值为1 1;如果;如果清零,则对应位的值为清零,则对应位的值为0 0。 1 & 1 = 11 & 1 = 1、1 & 0 = 01 & 0 = 0、0 & 1 = 00 & 1 = 0、0 & 0 = 00
7、 & 0 = 0return12.1.2 12.1.2 按位或操作符按位或操作符u按位或操作符将参与运算的两个操作数,按二进制位按位或操作符将参与运算的两个操作数,按二进制位进行进行“或或”运算。或运算时,如果两个二进制位上的数都运算。或运算时,如果两个二进制位上的数都为为0 0,则运算结果的对应位为,则运算结果的对应位为0 0;否则,对应位为;否则,对应位为1 1。即。即u1 | 1 = 11 | 1 = 1、1 | 0 = 11 | 0 = 1、0 | 1 = 10 | 1 = 1、0 | 0 = 00 | 0 = 0。u由运算规则可知,利用按位或操作符可以很容易地在由运算规则可知
8、,利用按位或操作符可以很容易地在不影响其它位的情况下将一个整数的某位设置为不影响其它位的情况下将一个整数的某位设置为1 1。u例如,无符号字符型例如,无符号字符型c c的值为的值为165165,需点亮,需点亮1 1号灯时,只号灯时,只要让要让c c与与0 x20 x2作按位或运算即可。作按位或运算即可。c |= 0 x2 c |= 0 x2 return12.1.3 异或操作符 u异或操作符异或操作符 也称也称xorxor操作符。操作符。“异或异或”指参与运算的两个二指参与运算的两个二进制位是否为异(不同),不同时结果为进制位是否为异(不同),不同时结果为1 1(真),相同时结(真),相同时结
9、果为果为0 0(假)。即(假)。即u1 1 = 01 1 = 0、1 0 = 11 0 = 1、0 1 = 10 1 = 1、0 0 = 00 0 = 0。u分析运算规则可知,某位与分析运算规则可知,某位与1 1进行异或运算时,结果与该位进行异或运算时,结果与该位正好相反(翻转),即正好相反(翻转),即1 1变变0 0,0 0变变1 1;某位与;某位与0 0进行异或时,结进行异或时,结果与该位相同。果与该位相同。u例如,无符号字符型例如,无符号字符型c c的值为的值为165165,需把第,需把第0 0到到3 3号灯的状态进号灯的状态进行翻转时即亮的灭,灭的亮,只要让行翻转时即亮的灭,灭的亮,只
10、要让c c与与0 xf0 xf作异或操作即可。作异或操作即可。c = 0 xfc = 0 xfreturn12.1.4 12.1.4 取反操作符取反操作符 u取反操作符是一个单目操作符,用来对一个整数按二进取反操作符是一个单目操作符,用来对一个整数按二进制位取反,即制位取反,即0 0变变1 1,1 1变变0 0。u例如,无符号字符型例如,无符号字符型c c的值为的值为165165,需把所有灯的状态进,需把所有灯的状态进行翻转时,只要让进行取反操作即可。行翻转时,只要让进行取反操作即可。c = cc = c。u整数整数a a的相反数可以表示为的相反数可以表示为a + 1a + 1。u因为因为aa
11、等价于等价于-1-a-1-a,故,故a+1a+1的值为的值为-1-a+1-1-a+1为为-a-a。 return12.1.5 12.1.5 左移操作符左移操作符u左移操作符左移操作符常用形式为:常用形式为:a na nu其中,其中,a a和和n n均为整数,表达式求值时将均为整数,表达式求值时将a a的二进制位全的二进制位全部左移部左移n n位,右端补位,右端补n n个个0 0,左端移出的,左端移出的n n位因溢出而舍弃。位因溢出而舍弃。显然显然n n的取值范围通常为的取值范围通常为1 1至至sizeof(a)sizeof(a)。u左移左移1 1位的值为位的值为a a的的2 2倍,左移倍,左移
12、2 2位的值为位的值为a a的的4 4倍,倍,(表达式的值不能超出整型的取值范围)。左移操作要比相表达式的值不能超出整型的取值范围)。左移操作要比相应的乘法运算(应的乘法运算(a a* *2 2)快得多。)快得多。u在位运算中,左移运算常用于构造操作数。在位运算中,左移运算常用于构造操作数。构造操作数u无符号字符型变量无符号字符型变量c c的值为的值为165165,需点亮第,需点亮第6 6号灯,可以号灯,可以用如下表达式用如下表达式uc |= 1 6c |= 1 6,其中,其中,1 61 u右移操作符与左移操作符类似,表达式右移操作符与左移操作符类似,表达式a na n求值时,求值时,会将会将
13、a a的二进制位全部右移的二进制位全部右移n n位,右端移出的位,右端移出的n n位因溢出而位因溢出而被舍弃。被舍弃。u根据左端移入数的不同,右移操作分为根据左端移入数的不同,右移操作分为“逻辑右移逻辑右移”和和“算术右移算术右移”两种。两种。u逻辑右移时,无论逻辑右移时,无论a a为何类型,左端均移入为何类型,左端均移入n n个个0 0;算术;算术右移时,如果右移时,如果a a为无符号数,则左端移入为无符号数,则左端移入n n个个0 0;如果;如果a a为有为有符号数,则左端移入的数为符号数,则左端移入的数为a a的符号位,即的符号位,即a a为正数时移入为正数时移入0 0,a a为负数时移
14、入为负数时移入1 1。tctc和和vc6.0vc6.0中均采用算术右移。中均采用算术右移。 例12-1 分析下面求整数绝对值的函数 u分析:分析:u如果如果x=0,x=0,则则y y的值为的值为0 0,(x y) - y (x y) - y 的结果仍为的结果仍为x x。u如果如果x0,x0,则则y y的值为的值为-1-1,x x与与y y进行异或运算实际上为对进行异或运算实际上为对x x进进行取反操作,减行取反操作,减y y就是加就是加1 1。x x取反加取反加1 1的结果就是的结果就是x x的相反数的相反数,即,即-x-x。 return12.2 12.2 位运算示例位运算示例u例例12-2
15、 12-2 用无符号字符型的一位控制编号为用无符号字符型的一位控制编号为0 07 7的八盏的八盏灯中的一盏,为灯中的一盏,为1 1时相应的灯亮,否则灯灭。随机生成时相应的灯亮,否则灯灭。随机生成2020个个0 07 7的整数,根据整数调整相关编号灯的开关。如整数的整数,根据整数调整相关编号灯的开关。如整数为为5 5,则,则5 5号灯亮时关掉它,灭时打开它。最初时八盏灯均号灯亮时关掉它,灭时打开它。最初时八盏灯均不亮,编程输出最终灯的状态。不亮,编程输出最终灯的状态。例12-2例12-3把一个整数32位中的高16位和低16位互换。 return12.3 位段 u通过位运算能够以位为单位使用内存空
16、间,如可以设置通过位运算能够以位为单位使用内存空间,如可以设置、改变或读取一个或多个二进制位的值,但是这些操作不、改变或读取一个或多个二进制位的值,但是这些操作不但麻烦而且极易出错。但麻烦而且极易出错。c c语言提供了语言提供了“位段位段”,利用位段,利用位段,可以方便的实现类似操作。,可以方便的实现类似操作。 uc c语言允许在一个结构体中以位为单位指定其成员实际语言允许在一个结构体中以位为单位指定其成员实际存储空间的长度,结构体中指定存储长度的成员就是所谓存储空间的长度,结构体中指定存储长度的成员就是所谓的位段。的位段。 结构体中的结构体u结构体结构体struct bitfieldstru
17、ct bitfield虽然有三个整型成员虽然有三个整型成员a,b,c,a,b,c,但但它们存储空间的长度只有它们存储空间的长度只有2 2位、位、4 4位和位和2 2位。位。u特别强调,整型成员特别强调,整型成员a a、b b、c c虽然位数不多,但仍为有虽然位数不多,但仍为有符号数,即符号数,即a a、c c的取值范围为的取值范围为-2-2至至1 1,b b的取值范围为的取值范围为-8-8至至7 7。位段u位段仅仅是自定义了存储空间的长度,使用时与正常的位段仅仅是自定义了存储空间的长度,使用时与正常的结构体成员相同,如结构体成员相同,如bf.a = 1bf.a = 1,bf.b = -8bf.b = -8等。等。u当参与运算时,位段会自动转换成整型,当给位段赋一当参与运算时,位段会自动转换成整型,当给位段赋一个超出其取值范围的值时,左端多余的位数会被舍弃。个超出其取值范围的值时,左端多余的位数会被舍弃。u位段类型转换和赋值的原则与位段类型转换和赋值的原则与c c语言基本类型所
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 精准广告受众定位行业跨境出海战略研究报告
- 科学实验视频教程制作行业深度调研及发展战略咨询报告
- 可回收物仓储行业深度调研及发展战略咨询报告
- 泡腾颗粒剂快速溶解企业制定与实施新质生产力战略研究报告
- 建筑隔声性能测试行业深度调研及发展战略咨询报告
- 2024年度吉林省护师类之社区护理主管护师高分通关题库A4可打印版
- 高速公路沥青路面施工安全管理措施
- 古诗两首锄禾悯农教学总结(3篇)
- 二年级道德与法治校园文化建设计划
- 科研机构师德师风心得体会
- 2024年安庆迎江区招聘社区工作人员考试真题
- 六年级下册美术教案-第9课 纸塑丨浙美版
- DB11_T1832.3-2021 建筑工程施工工艺规程第3部分:混凝土结构工程
- 国家开放大学《社会心理适应》形考任务1-7参考答案
- 2022年系统架构设计师(高级)软件水平考试题库
- 《淹溺急救》PPT课件(2022版)
- EPC项目管理之安全文明施工责任制度
- 第二节模糊综合评价法
- 《雷锋叔叔_你在哪里》说课稿55481
- 战略预算管理基本原理培训ppt课件
- 北京爱琴海购物中心工程部管理制度手册
评论
0/150
提交评论