C语言程序设计课件位运算

C语言程序设计课件位运算

ID:45066294

大小:274.16 KB

页数:34页

时间:2019-11-09

C语言程序设计课件位运算_第1页
C语言程序设计课件位运算_第2页
C语言程序设计课件位运算_第3页
C语言程序设计课件位运算_第4页
C语言程序设计课件位运算_第5页
资源描述:

《C语言程序设计课件位运算》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、位运算课程:程序设计语言教材:谭浩强《C程序设计》第三版讲授:陈慧炜7/15/2021本章重点6种基本位运算符的使用及其功能位运算符的综合使用位段的理解和应用7/15/2021请写出47的二进制形式请写出-47的二进制数形式提示:1、在计算机中,数值一律以补码表示2、绝对值相同的数,原码除符号位外都相同3、正数的补码、原码、反码相同4、负数的补码,是原码的反码加1注意:最高位是符号位,1表示负数,0表示正数整数的二进制表示7/15/2021整数的二进制表示求负数-47的补码原码:反码:补码:7/

2、15/2021位与字节76543210高低一个字节由8个二进制位(bit)构成,一个位的取值为0或1。最右端的那一位是“最低位”,编号为0;最左端的那一位称为“最高位”,是符号位,从最低位到最高位按顺序依次编号。7/15/2021位运算符1、按位与(&)0&0=0,0&1=0,1&1=1该位只要有一个0便为0计算:00000011(3)&00000101(5)(-3)?&(-5)??00000001(1)7/15/2021按位与的用途(1)清零(用0相&)11011001&11110000110

3、10000(2)保留指定位(用1相&)01010100&0011101100010000(3)用来检测某个位是否置位(用1相&)7/15/2021例:有一数据b,想测试其第4位是否为1?分析:1.位号是从右向左数的2.设置一个只有第4位为1的二进制数a:00010000,与b进行与运算,如果结果为00010000,则第4位为1;反之结果为00000000,则第4位为0。7/15/20212、按位或(

4、)0

5、0=0,0

6、1=1,1

7、1=1该位只要有一个1便为1按位或的用途:(1)置位:用1去跟某些

8、位或,使某些位为1,如:11011001

9、0000111111011111(2)保留原位:用0去跟某些位或,如上例前4位7/15/20213、异或(^)0^0=0,0^1=1,1^1=0异号为1(真),同号为0(假)异或运算符的用途:(1)任何数与本身异或,则为010101111^1010111100000000(2)与0异或,则保留原值。10101111^00000000101011117/15/2021(3)与-1异或,相当于将各位取反(因为-1的每个位都为1)。10101111^11111

10、111(-1)01010000(4)特定位翻转。将需要翻转的位与1异或即可。01111010^00001111011101017/15/2021(5)交换两个值,不用临时变量。例:a=3,b=4,将a和b的值互换,可以用以下赋值语句实现:a=a^b;b=b^a;a=a^b;a=011^b=100a=111^b=100b=011^a=111a=100最后,a=100(4)b=011(3)实现了交换7/15/2021

11、&^000110110001011011107/15/20214、取反(~)~0=

12、1,~1=0举例:使16位整数a最低位为0分析:a&1111111111111110保留前15位,将最低位清零;1111111111111110这个数值为多少,较难运算;1111111111111110=~00000000000000010000000000000001的值较为简单,就是1;所以可以用:a=a&~1的表达式达到要求。7/15/20215、左移运算符(<<)左移n位,右补n个0。左移n位相当于乘以2^n,左移位运算速度比乘法快。但是,左移位可能溢出,实际结果不会超出指定的整数类型的

13、值域。unsignedcharx=37<<3;00100101(37)<<300101000(40)7/15/20216、右移运算符(>>)右移n位相当于除以2^n,右移位运算速度比除法快。00001111>>200000011注意:无符号数:右移时左边补0;有符号数:非负整数——右移位时左边补0;负整数——逻辑右移:左边补0;算术右移:左边补17/15/2021检查一下你所用的计算机系统的C编译系统执行的是逻辑右移还是算术右移:程序代码:#includevoidmain(){

14、inta=~0,b;b=a>>1;if(b==a)printf(“算术右移!”);elseprintf(“逻辑右移!”);}若b仍为~0,则表明采用的是算术右移,反之为逻辑右移。7/15/2021位运算符功能总结清位(置0):跟0(若非说明,指指定位的值)相&置位(置1):跟1相

15、检测某位是否为1:跟1相&保留原位:跟1相&,或者跟0相

16、翻转某位:跟1相^7/15/2021位运算综合运用举例例12.1:取一个整数a从右端开始的4~7位。31876543210313043210在中间取位比

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。