版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计第第第第第第十十十十十十一一一一一一章章章章章章第十一章第十一章 位运算位运算本章要点:本章要点: 掌握掌握C C语言的位运算符语言的位运算符 能够使用位运算符进行基本位运算能够使用位运算符进行基本位运算 了解了解C C语言的位运算的一些应用实例语言的位运算的一些应用实例 了解位段的基本概念了解位段的基本概念语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计第第第第第第十十十十十十一一一一一一章章章章章章 位运算是指进行二进制位运算是指进行二进制位位的运算,即对字节或的运算,即对字节或字节内部的二进制
2、字节内部的二进制位位进行运算。为了便于计算机的进行运算。为了便于计算机的运算,计算机中是以运算,计算机中是以补码补码形式来存放数的。形式来存放数的。 一、位运算符一、位运算符 用于用于有符号有符号和和无符号无符号的的整型数整型数。 包括包括: char short int long unsigned 。 位运算符共位运算符共 6 种:种: & | 语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计第第第第第第十十十十十十一一一一一一章章章章章章1. (按位按位取反取反运算符运算符) 作用作用: 对一个二进制数对一个二进制数逐位逐位取反取反 如如: a = 15 则
3、则 a 00000000000011111111111111110000a a 实例实例11.1 main ( ) int a = 0 , b = 1 ; printf ( “ %d , %d n”, a ,b ) ; printf ( “ %d , %d n”, !a , !b ) ; printf ( “ %d , %d n”, a , b ) ; 运行结果运行结果: 1, 2 1, 0 0, 1 实例实例注意注意: 运算和运算和 ! 运算的区别。运算的区别。 的优先级与的优先级与 + , , !同级,同级,结合性从右至左。结合性从右至左。注意事项注意事项语语语语语语言言言言言言程程程程程
4、程序序序序序序设设设设设设计计计计计计第第第第第第十十十十十十一一一一一一章章章章章章1. (按位按位取反取反运算符运算符) 作用作用: 对一个二进制数对一个二进制数逐位逐位取反取反 如如: a = 15 则则 a 00000000000011111111111111110000a a实例实例注意事项注意事项语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计第第第第第第十十十十十十一一一一一一章章章章章章 2. & (按位按位与与运算运算) 作用作用: 对参加运算的两个二进制数对参加运算的两个二进制数逐位逐位进行进行逻辑逻辑 与与运算运算, 如如: a &
5、 b 规则规则: 0&0 = 0, 1&0 = 0 , 0&1 = 0, 1&1 = 1 例如例如: a = 1 , b = 2 , 则则: a & b = 0 000000010000000011111110111111110000000000000000aba&b实例实例main( ) int a = 5 , b = 12 , d ; d = a&b ; printf (“%d&%d = %dn”, a, b, d ); 输出输出: 5&12 = 4语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计
6、计第第第第第第十十十十十十一一一一一一章章章章章章 2. & (按位按位与与运算运算) 作用作用: 对参加运算的两个二进制数对参加运算的两个二进制数逐位逐位进行进行逻辑逻辑 与与运算运算, 如如: a & b 规则规则: 0&0 = 0, 1&0 = 0 , 0&1 = 0, 1&1 = 1 例如例如: a = 1 , b = 2 , 则则: a & b = 0 000000010000000011111110111111110000000000000000aba&b实例实例语语语语语语言言言言言言程程程程程程序序序序序序设设设设
7、设设计计计计计计第第第第第第十十十十十十一一一一一一章章章章章章 3. | (按位按位或或运算运算) 作用作用: 对参加运算的两个二进制数对参加运算的两个二进制数逐位逐位进行进行逻辑逻辑或或运算运算 如如: a | b 规则规则: 0 | 0 = 0 , 1 | 0 = 1 , 0 | 1 = 1 , 1 | 1 = 1 例如例如: a = 1 , b = 1 , 则则: a | b = 1。000000010000000011111111111111111111111111111111aba | b语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计第第第第第第十十十十十
8、十一一一一一一章章章章章章 4. (按位按位异或异或运算运算) 作用作用: 对参加运算的两个二进制数对参加运算的两个二进制数逐位逐位进行进行逻辑异逻辑异或或运算运算 如如: a b 规则规则: 0 0 = 0 , 1 0 = 1 , 0 1 = 1 , 1 1 = 0 例如例如: a = 15 , b = 0 , 则则: a b = 15000011110000000000000000000000000000111100000000aba b语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计第第第第第第十十十十十十一一一一一一章章章章章章结论结论 例例 : main (
9、) int a = 3 , b = 4 ; a = a b ; b = b a ; a = a b ; printf ( “ %d , %d ” , a , b ) ; 输出输出: 4 , 3 利用异或运算,不必设置第三个利用异或运算,不必设置第三个变量就可以实现两个变量值的交换。变量就可以实现两个变量值的交换。语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计第第第第第第十十十十十十一一一一一一章章章章章章说明说明: 5. (左移左移位位运算运算) 作用作用: 将操作数的各个二进位顺序将操作数的各个二进位顺序左左移。移。右端右端空出的空出的 位位补补0 , 而移出左端之
10、外的位则舍去。而移出左端之外的位则舍去。 如如: a n 表示将表示将 a 的各个二进位顺序左移的各个二进位顺序左移 n 位位( n 为正整数为正整数)。 例如例如: a = 25 则则 a 3 结果为结果为 200 00011001000000001100100000000000aa 3 说明说明: (1) 左移运算相当于乘左移运算相当于乘 2 运算。运算。 对无符号数,对无符号数,左移左移 1 位相当于乘位相当于乘 2 左移左移 n 位位 ,则乘,则乘 2n(2) 对于用补码表示的正数,如果左移出的全部对于用补码表示的正数,如果左移出的全部是是0 ,且移出后的最高位仍是,且移出后的最高位仍
11、是 0 。(3) 对于用补码表示的负数,如果左移出的全部对于用补码表示的负数,如果左移出的全部是是1 ,且移出后的最高位仍是,且移出后的最高位仍是 1 。 (4) 若非上述情况若非上述情况 ( 如如:左移出现溢出时左移出现溢出时), 就不就不能简单地用乘能简单地用乘 2 来计算。来计算。 如如: 有符号字符型数有符号字符型数 64 , 当它左移当它左移2 位时,结果为位时,结果为 0 。语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计第第第第第第十十十十十十一一一一一一章章章章章章说明说明: 5. (左移左移位位运算运算) 作用作用: 将操作数的各个二进位顺序将操作数的
12、各个二进位顺序左左移。移。右端右端空出的空出的 位位补补0 , 而移出左端之外的位则舍去。而移出左端之外的位则舍去。 如如: a n 表示将表示将 a 的各个二进位顺序左移的各个二进位顺序左移 n 位位( n 为正整数为正整数)。 例如例如: a = 25 则则 a 3 结果为结果为 200 00011001000000001100100000000000aa (右移右移运算符运算符) 作用作用: 将操作数的各个二进位顺序将操作数的各个二进位顺序右右移。移。左端左端空出空出的位的位补补0 或补或补 1 ,而移出右端之外的位则舍去。,而移出右端之外的位则舍去。 如如: a n 表示将表示将 a
13、的各个二进位顺序右移的各个二进位顺序右移 n 位位 右移运算的结果与操作数的符号有关右移运算的结果与操作数的符号有关对无符号数进行右移,左端空出的位一律补对无符号数进行右移,左端空出的位一律补 0 。对用补码表示的有符号数,则随系统而定。即对用补码表示的有符号数,则随系统而定。即 “ 逻辑右移逻辑右移 ” 空位一律补空位一律补 0 。 “ 算术右移算术右移 ” 正数右移,空位补正数右移,空位补 0 。 负数右移,空位补负数右移,空位补 1 。Turbo C 中采用算术右移中采用算术右移语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计第第第第第第十十十十十十一一一一一一章
14、章章章章章补充说明补充说明 6. (右移右移运算符运算符) 作用作用: 将操作数的各个二进位顺序将操作数的各个二进位顺序右右移。移。左端左端空出空出的位的位补补0 或补或补 1 ,而移出右端之外的位则舍去。,而移出右端之外的位则舍去。 如如: a n 表示将表示将 a 的各个二进位顺序右移的各个二进位顺序右移 n 位位语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计第第第第第第十十十十十十一一一一一一章章章章章章例如例如: a = 32768000000001000000000000000010000000000000011000000aa 1a 1逻辑右移逻辑右移,
15、结果为结果为 16384算术右移算术右移, 结果为结果为 16384算术右移运算算术右移运算相当于除相当于除 2 运算。右移运算。右移 1 位位相当于除相当于除 2。 右移右移 n 位位 ,则除,则除 2n 。语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计第第第第第第十十十十十十一一一一一一章章章章章章 二、优先级二、优先级 1. 位运算符的优先级位运算符的优先级 2 & y 2 )& (y 语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计第第第第第第十十十十十十一一一一一一章章章章章章2. 复合赋值运算复合赋值运算 &
16、 = , | = , = , = 如如: a & = b a = a & b a = m + 1 a = a ( 7 4 + 1 ) 即即 a 4 (2) 设置一个设置一个低低 4位位全为全为 1,其余位全为,其余位全为 0 的数。的数。 ( 0 4 & ( 0 4 ; c = ( 0 ( m n + 1 ) c = ( 0 n ) d = b & c 语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计第第第第第第十十十十十十一一一一一一章章章章章章例例11.3 将一个整数将一个整数 a 循环右移循环右移 n 位。位。 所谓循环右移所谓循环
17、右移是将是将 a 最最右端右端的位的位顺序顺序移到移到 a 的最的最左端左端,而将,而将 a 中原中原 左端左端的各位顺序右移到最的各位顺序右移到最右端右端。右移右移 2 位位 1 0 0 0 1 0 0 1 0 1 1 0 0 0 1 0语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计第第第第第第十十十十十十一一一一一一章章章章章章 (1) 将将 a 左左移移 16 n 位并存入变量位并存入变量 b 中,这样中,这样 b 中最中最左端左端 的的 n 位就是原位就是原 a 最最右端右端的的 n 位,位, 而而 b 中最右端中最右端 (16 n )位全为位全为 0 。 b = a n (3) 将将 c 与与 b 按位或按位或运算运算 c = c | b 11011111101010110110000000000000ab0001101111110101c0111101111110101c语语语语语语言言言言言言程程程程程程序序序序序序设设设设设设计计计计计计第第第第第第十十十十十十一一一一一一章章章章章章void main ( ) unsignde a , b , c ; int n ; scanf ( “ %o , %d ” , &a , &n ) ; b =
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026四川长虹电子控股集团有限公司招聘税务主管岗位1人笔试参考题库及答案解析
- 班集体责任制度
- 生产技术责任制度
- 用电场所岗位责任制度
- 电厂领导责任制度汇编
- 电站厂长责任制度
- 疫情防控责任制度模板
- 皮革厂环境责任制度
- 监理工程包保责任制度
- 相对过错责任制度
- 人教版小学三年级上册《信息科技》全套完整版课件
- 《急性阑尾炎》课件
- 《单据审核要点》课件
- 水电站项目建设投资后评价报告
- 制造业端到端业务流程
- 滚动轴承设计计算
- 2025年浙能集团招聘笔试参考题库含答案解析
- 护理投诉纠纷处理与沟通
- 建筑行业的智能建筑安全培训
- 济南轨道交通集团运营有限公司招聘笔试真题2023
- 银行标准化管理实施方案范例(3篇)
评论
0/150
提交评论