C语言位运算课件.ppt

上传人:豆**** 文档编号:26133648 上传时间:2022-07-16 格式:PPT 页数:24 大小:506.50KB
返回 下载 相关 举报
C语言位运算课件.ppt_第1页
第1页 / 共24页
C语言位运算课件.ppt_第2页
第2页 / 共24页
点击查看更多>>
资源描述

《C语言位运算课件.ppt》由会员分享,可在线阅读,更多相关《C语言位运算课件.ppt(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、语语言言程程序序设设计计第第十十一一章章 位运算是指进行二进制位运算是指进行二进制位位的运算,即对字节或的运算,即对字节或字节内部的二进制字节内部的二进制位位进行运算。为了便于计算机的进行运算。为了便于计算机的运算,计算机中是以运算,计算机中是以补码补码形式来存放数的。形式来存放数的。 一、位运算符一、位运算符 用于用于有符号有符号和和无符号无符号的的整型数整型数。 包括包括: char short int long unsigned 。 位运算符共位运算符共 6 种:种: & | 语语言言程程序序设设计计第第十十一一章章1. (按位按位取反取反运算符运算符) 作用作用: 对一个二进制数对一个

2、二进制数逐位逐位取反取反 如如: a = 15 则则 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 实例实例注意注意: 运算和运算和 ! 运算的区别。运算的区别。 的优先级与的优先级与 + , , !同级,同级,结合性从右至左。结合性从右至左。

3、注意事项注意事项语语言言程程序序设设计计第第十十一一章章1. (按位按位取反取反运算符运算符) 作用作用: 对一个二进制数对一个二进制数逐位逐位取反取反 如如: a = 15 则则 a 00000000000011111111111111110000a a实例实例注意事项注意事项语语言言程程序序设设计计第第十十一一章章 2. & (按位按位与与运算运算) 作用作用: 对参加运算的两个二进制数对参加运算的两个二进制数逐位逐位进行进行逻辑逻辑 与与运算运算, 如如: a & b 规则规则: 0&0 = 0, 1&0 = 0 , 0&1 = 0, 1&1 = 1 例如例如: a = 1 , b =

4、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语语言言程程序序设设计计第第十十一一章章 2. & (按位按位与与运算运算) 作用作用: 对参加运算的两个二进制数对参加运算的两个二进制数逐位逐位进行进行逻辑逻辑 与与运算运算, 如如: a & b 规则规则: 0&0 = 0, 1&0 = 0 , 0&1 = 0,

5、1&1 = 1 例如例如: a = 1 , b = 2 , 则则: a & b = 0 000000010000000011111110111111110000000000000000aba&b实例实例语语言言程程序序设设计计第第十十一一章章 3. | (按位按位或或运算运算) 作用作用: 对参加运算的两个二进制数对参加运算的两个二进制数逐位逐位进行进行逻辑逻辑或或运算运算 如如: a | b 规则规则: 0 | 0 = 0 , 1 | 0 = 1 , 0 | 1 = 1 , 1 | 1 = 1 例如例如: a = 1 , b = 1 , 则则: a | b = 1。0000000100000

6、00011111111111111111111111111111111aba | b语语言言程程序序设设计计第第十十一一章章 4. (按位按位异或异或运算运算) 作用作用: 对参加运算的两个二进制数对参加运算的两个二进制数逐位逐位进行进行逻辑异逻辑异或或运算运算 如如: a b 规则规则: 0 0 = 0 , 1 0 = 1 , 0 1 = 1 , 1 1 = 0 例如例如: a = 15 , b = 0 , 则则: a b = 15000011110000000000000000000000000000111100000000aba b语语言言程程序序设设计计第第十十一一章章结论结论 例例

7、: main ( ) int a = 3 , b = 4 ; a = a b ; b = b a ; a = a b ; printf ( “ %d , %d ” , a , b ) ; 输出输出: 4 , 3 利用异或运算,不必设置第三个利用异或运算,不必设置第三个变量就可以实现两个变量值的交换。变量就可以实现两个变量值的交换。语语言言程程序序设设计计第第十十一一章章说明说明: 5. (左移左移位位运算运算) 作用作用: 将操作数的各个二进位顺序将操作数的各个二进位顺序左左移。移。右端右端空出的空出的 位位补补0 , 而移出左端之外的位则舍去。而移出左端之外的位则舍去。 如如: a n 表示

8、将表示将 a 的各个二进位顺序左移的各个二进位顺序左移 n 位位( n 为正整数为正整数)。 例如例如: a = 25 则则 a 3 结果为结果为 200 00011001000000001100100000000000aa 3 说明说明: (1) 左移运算相当于乘左移运算相当于乘 2 运算。运算。 对无符号数,对无符号数,左移左移 1 位相当于乘位相当于乘 2 左移左移 n 位位 ,则乘,则乘 2n(2) 对于用补码表示的正数,如果左移出的全部对于用补码表示的正数,如果左移出的全部是是0 ,且移出后的最高位仍是,且移出后的最高位仍是 0 。(3) 对于用补码表示的负数,如果左移出的全部对于用

9、补码表示的负数,如果左移出的全部是是1 ,且移出后的最高位仍是,且移出后的最高位仍是 1 。 (4) 若非上述情况若非上述情况 ( 如如:左移出现溢出时左移出现溢出时), 就不就不能简单地用乘能简单地用乘 2 来计算。来计算。 如如: 有符号字符型数有符号字符型数 64 , 当它左移当它左移2 位时,结果为位时,结果为 0 。语语言言程程序序设设计计第第十十一一章章说明说明: 5. (左移左移位位运算运算) 作用作用: 将操作数的各个二进位顺序将操作数的各个二进位顺序左左移。移。右端右端空出的空出的 位位补补0 , 而移出左端之外的位则舍去。而移出左端之外的位则舍去。 如如: a n 表示将表

10、示将 a 的各个二进位顺序左移的各个二进位顺序左移 n 位位( n 为正整数为正整数)。 例如例如: a = 25 则则 a 3 结果为结果为 200 00011001000000001100100000000000aa (右移右移运算符运算符) 作用作用: 将操作数的各个二进位顺序将操作数的各个二进位顺序右右移。移。左端左端空出空出的位的位补补0 或补或补 1 ,而移出右端之外的位则舍去。,而移出右端之外的位则舍去。 如如: a n 表示将表示将 a 的各个二进位顺序右移的各个二进位顺序右移 n 位位 右移运算的结果与操作数的符号有关右移运算的结果与操作数的符号有关对无符号数进行右移,左端空

11、出的位一律补对无符号数进行右移,左端空出的位一律补 0 。对用补码表示的有符号数,则随系统而定。即对用补码表示的有符号数,则随系统而定。即 “ 逻辑右移逻辑右移 ” 空位一律补空位一律补 0 。 “ 算术右移算术右移 ” 正数右移,空位补正数右移,空位补 0 。 负数右移,空位补负数右移,空位补 1 。Turbo C 中采用算术右移中采用算术右移语语言言程程序序设设计计第第十十一一章章补充说明补充说明 6. (右移右移运算符运算符) 作用作用: 将操作数的各个二进位顺序将操作数的各个二进位顺序右右移。移。左端左端空出空出的位的位补补0 或补或补 1 ,而移出右端之外的位则舍去。,而移出右端之外

12、的位则舍去。 如如: a n 表示将表示将 a 的各个二进位顺序右移的各个二进位顺序右移 n 位位语语言言程程序序设设计计第第十十一一章章例如例如: a = 32768000000001000000000000000010000000000000011000000aa 1a 1逻辑右移逻辑右移, 结果为结果为 16384算术右移算术右移, 结果为结果为 16384算术右移运算算术右移运算相当于除相当于除 2 运算。右移运算。右移 1 位位相当于除相当于除 2。 右移右移 n 位位 ,则除,则除 2n 。语语言言程程序序设设计计第第十十一一章章 二、优先级二、优先级 1. 位运算符的优先级位运算

13、符的优先级 2 & y 2 )& (y 语语言言程程序序设设计计第第十十一一章章2. 复合赋值运算复合赋值运算 & = , | = , = , = 如如: 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 位。位。 所谓循环右移所谓循

14、环右移是将是将 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 |

15、 b 11011111101010110110000000000000ab0001101111110101c0111101111110101c语语言言程程序序设设计计第第十十一一章章void main ( ) unsignde a , b , c ; int n ; scanf ( “ %o , %d ” , &a , &n ) ; b = a n ; c = c | b ; printf ( “ %o n %o n” , a , c ) ; 如输入如输入: 157653 , 3 输出为输出为: 157653 75765 同样可以实现同样可以实现循环左移循环左移。1101111111011111 10101101010110110110111101111011 1111010111110101语语言言程程序序设设计计第第十十一一章章作业作业P308 12.1 12.2 12.3P308 12.1 12.2 12.324 结束语结束语

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

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

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