Clanguage第12章位运算

Clanguage第12章位运算

ID:39318190

大小:269.92 KB

页数:16页

时间:2019-06-30

Clanguage第12章位运算_第1页
Clanguage第12章位运算_第2页
Clanguage第12章位运算_第3页
Clanguage第12章位运算_第4页
Clanguage第12章位运算_第5页
资源描述:

《Clanguage第12章位运算》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第12章位运算位运算符及其应用位段及其应用12.1位运算符和位运算表达式C语言中提供了如下6种的位运算符:&按位与

2、按位或^按位异或<<左移>>右移~按位取反提示:只允许对整型、字符型数据进行位运算,而实型数据不能进行位运算。位运算规则:例12.1若a=(15)10=(00001111)2,b=(80)10=(01010000)10则:a&b=00000000,a

3、b=01011111,a^b=01011111,~a=11110000ABA&BA

4、BA^B~a000001010111100110111100位运算的应用:1

5、)"按位与"运算经常用于将某些二进制位屏蔽掉。例12.2编写函数:使一个整数k中的低4位置0。分析:用“与”运算实现:将k的低4位与0相与,其他位与1相与,即将k与十六进制的1110相与。程序如下:unsignedint_set(unsignedintk){k=k&0x1110;return(k);}结论:任何二进制位与0相与能实现置0,与1相与该位保持不变。2)"按位或"运算经常用与将某些二进制位置1。例12.4:将一个字节的高4位置为1010并输出结果。分析:直接用位运算符,可以很方便的置1、清0、翻转等,但无法直接实

6、现置给定的值。可以用两步实现:首先将高4位清0,然后与10100000相或。程序如下:/*设a为待处理的数据,转换成二进制为00001000,b用来保存将a的高4位清0后的结果*/main(){unsignedchara,b,c;a=8;b=a&0x0f;c=b

7、0xa0;/*c用于保存最终结果*/printf("%x",c);}运行结果:101010003)按位异或运算经常用与将某些位翻转。例12.5编程实现,将一整数n的高8位翻转,低8位不变分析:用“异或”运算实现,即高8位与1相异或,低8位与0相异或,也就是k与十六

8、进制的ff00相异或。程序如下:main(){intn=129;printf("beforereset,n=%x",n);n=n∧0xff00;printf("afterreset,n=%x",n);}运行结果:beforereset,n=0000000010000001afterreset,n=1111111110000001结论:任何二进制位与0异或,保持不变;与1异或,对应位翻转。4)左移、右移运算实现将一个数的各个二进制位向左、向右移若干位。左移:将一个数的各个二进制位左移若干位,高位左移后舍弃,低位补0。

9、若定义:inta=8;即a=00001000,则语句a=a<<2;将a的各二进制位左移2位,空出的低位补0。结果为:00100000右移:将一个数的各个二进制位右移若个位,低位右移后舍弃,高位补0还是补1,要区别有符号数还是无符号数:无符号数高位补0,有符号数高位补原符号位。若定义unsignedinta=8;即00001000,则语句a=a>>2;将a的各二进制位右移2位,空出的高位补0。结果为:0000001012.2位段1.位段的概念以位为单位定义其长度的结构体成员。2.位段的定义例12.6若某个控制字长32位,分5

10、段,每段的长度分别为:2,6,4,4,16位;每段存放一个信息,且第4段空出不用。可用如下结构体类型描述:structcon_word{unsigneda:2;/*位段a,长度为2*/unsignedb:6;/*a,b,c为有名位段*/unsignedc:4;unsigned:4;/*该位段为无名位段,表示这4位空间空出不使用*/inti;}data;变量data的存储结构如图:abci……成员名264416……长度3.位段的引用位段是结构体类型的某个成员,因此,位段的引用同结构体成员的引用方法相同。如:data.a=0x

11、01;/*给位段a赋值,*/data.b=0x0a;/*给位段b赋值*/data.i=12;/*给位段i赋值*/printf(“%02x,%02x,%4d”,data.a,data.b,data.i);输出:01,0a,12特别提示:使用位段时,要注意该位段的能表示的数据的范围。4.位段的应用编程模拟一个温度测控系统:从键盘输入模拟温度的采样值(0~255),该采样值与0.2相乘,得出实际温度值,根据该温度值,控制温度指示灯的亮与灭(从0度开始,温度每增加10度则多点亮一个指示灯);将该温度值与设定温度比较,当温度小于10

12、度和高于40度时分别开启升温设备和降温设备,同时报警。反复以上过程,直至输入的测温值为300为止。分析:系统中需要控制的设备有:五个温度指示灯,升温设备,降温设备,报警设备。因此可用如下的结构体变量word表示该系统的控制字,其成员构成如下:(1)无符号整型tem1用来存放输入的温度采样值(0~255)

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

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

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