Clanguage第12章位运算.ppt

上传人:牧羊曲112 文档编号:5421872 上传时间:2023-07-05 格式:PPT 页数:16 大小:341.47KB
返回 下载 相关 举报
Clanguage第12章位运算.ppt_第1页
第1页 / 共16页
Clanguage第12章位运算.ppt_第2页
第2页 / 共16页
Clanguage第12章位运算.ppt_第3页
第3页 / 共16页
Clanguage第12章位运算.ppt_第4页
第4页 / 共16页
Clanguage第12章位运算.ppt_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《Clanguage第12章位运算.ppt》由会员分享,可在线阅读,更多相关《Clanguage第12章位运算.ppt(16页珍藏版)》请在三一办公上搜索。

1、第12章 位运算,位运算符及其应用 位段及其应用,12.1位运算符和位运算表达式,C语言中提供了如下6种的位运算符:&按位与|按位或 按位异或 右移 按位取反提示:只允许对整型、字符型数据进行位运算,而实型数据不能进行位运算。,位运算规则:例12.1 若 a=(15)10=(00001111)2,b=(80)10=(01010000)10则:a&b=0000 0000,a|b=0101 1111,ab=01011111,a=1111 0000,位运算的应用:1)按位与运算经常用于将某些二进制位屏蔽掉。例12.2 编写函数:使一个整数k中的低4位置0。分析:用“与”运算实现:将k的低4位与0相与

2、,其他位与1相与,即将 k与十六进制的 1110 相与。程序如下:unsigned int_set(unsigned int k)k=k 结论:任何二进制位与0相与能实现置0,与1相与该位保持不变。,2)按位或运算经常用与将某些二进制位 置 1。例12.4:将一个字节的高4位置为1010并输出结果。分析:直接用位运算符,可以很方便的置1、清0、翻转等,但无法直接实现置给定的值。可以用两步实现:首先将高4位清 0,然后与1010 0000相或。程序如下:/*设 a 为待处理的数据,转换成二进制为00001000,b用来保存将a的高4位清0后的结果*/main()unsigned char a,b

3、,c;a=8;b=a 运行结果:10101000,3)按位异或运算经常用与将某些位翻转。例12.5 编程实现,将一整数n的高8位翻转,低8位不变分析:用“异或”运算实现,即高8位与1相异或,低8位与0相异或,也就是k与十六进制的ff00相异或。程序如下:main()int n=129;printf(n before reset,n=%x,n);n=n0 xff00;printf(n after reset,n=%x,n);运行结果:before reset,n=00000000 10000001after reset,n=11111111 10000001 结论:任何二进制位与0异或,保持不变

4、;与1异或,对应位翻转。,4)左移、右移运算实现将一个数的各个二进制位向左、向右移若干位。左移:将一个数的各个二进制位左移若干位,高位左移后舍弃,低位补0。若定义:int a=8;即a=0000 1000,则语句a=a2;将 a 的各二进制位右移 2 位,空出的高位补 0。结果为:0000 0010,12.2 位段,1.位段的概念以位为单位定义其长度的结构体成员。2位段的定义例12.6若某个控制字长32位,分5段,每段的长度分别为:2,6,4,4,16位;每段存放一个信息,且第4段空出不用。可用如下结构体类型描述:struct con_word unsigned a:2;/*位段a,长度为2*

5、/unsigned b:6;/*a,b,c为有名位段*/unsigned c:4;unsigned:4;/*该位段为无名位段,表示这4位空间空出不使用*/int i;data;,变量data 的存储结构如图:a b c i 成员名 2 6 4 4 16 长度 3位段的引用 位段是结构体类型的某个成员,因此,位段的引用同结构体成员的引用方法相同。如:data.a=0 x01;/*给位段a赋值,*/data.b=0 x0a;/*给位段b赋值*/data.i=12;/*给位段 i赋值*/printf(“%02x,%02x,%4d”,data.a,data.b,data.i);输出:01,0a,12

6、特别提示:使用位段时,要注意该位段的能表示的数据的范围。,4位段的应用编程模拟一个温度测控系统:从键盘输入模拟温度的采样值(0255),该采样值与0.2相乘,得出实际温度值,根据该温度值,控制温度指示灯的亮与灭(从0度开始,温度每增加10度则多点亮一个指示灯);将该温度值与设定温度比较,当温度小于10度和高于40度时分别开启升温设备和降温设备,同时报警。反复以上过程,直至输入的测温值为300为止。,分析:系统中需要控制的设备有:五个温度指示灯,升温设备,降温设备,报警设备。因此可用如下的结构体变量word表示该系统的控制字,其成员构成如下:(1)无符号整型tem1 用来存放输入的温度采样值(0

7、255),若每个刻度代表0.2度,则可以测量的温度范围为051度。浮点类型的成员tem2用来存放tem1成员转换成的温度值。(2)四个位段存放(要输出的)控制数据。其中,位段lmp 宽度为5,控制五个温度指示灯,值为1时灯亮,为0时灯不亮。其余的3个位段sw1、sw2、alm宽度均为1,分别控制升温设备、降温设备和报警设备,都是为“1”时开启,为0时关闭。函数sample()实现测温采样:通过键盘输入模拟测温数据,并转换成实际温度值。函数 control()实现输出控制:通过屏幕显示和喇叭鸣笛的方式输出温度值、温度级别、设备开关情况和报警状态。,#define ON 1#define OFF

8、0struct ctrl_type unsigned char tem1;float tem2;unsigned lmp:5;unsigned sw1:1;unsigned sw2:1;unsigned alm:1;,main()void sample(struct ctrl_type*wp);void control(struct ctrl_type*wp);struct ctrl_type word;while(1)sample(/*输出控制字,控制各设备*/,void sample(struct ctrl_type*wp)printf(ninput test data(0255)(300 for end):);scanf(%u,说明:1)函数sample()实现测温采样:通过键盘输入模拟测温数据,并转换成实际温度值。2)函数 control()实现输出控制:通过屏幕显示和喇叭鸣笛的方式输出温度值、温度级别、设备开关情况和报警状态,void control(struct ctrl_type*wp)char i,m;printf(n%6s%6s%4s%4s%6s,degree,lamp,sw1,sw2,alarm);printf(n%6.1f,wp-tem2);for(i=0,m=0 x10;i=1)printf(%c,wp-lmp,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号