欢迎来到装配图网! | 帮助中心 装配图网zhuangpeitu.com!
装配图网
ImageVerifierCode 换一换
首页 装配图网 > 资源分类 > PPT文档下载
 

C++课件:第12章位运算.ppt

  • 资源ID:19954976       资源大小:270.42KB        全文页数:16页
  • 资源格式: PPT        下载积分:9.9积分
快捷下载 游客一键下载
会员登录下载
微信登录下载
三方登录下载: 微信开放平台登录 支付宝登录   QQ登录   微博登录  
二维码
微信扫一扫登录
下载资源需要9.9积分
邮箱/手机:
温馨提示:
用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

C++课件:第12章位运算.ppt

C+第 12章 位运算 1. 位运算符及其应用 2. 位段及其应用 12.1位运算符和位运算表达式 C语言中提供了如下 6种的位运算符: return(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,c; a=8; b=a c=b|0 xa0; /*c用于保存最终结果 */ printf( %x ,c); 运行结果: 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=n 0 xff00; printf( n after reset,n=%x ,n); 运行结果: before reset,n=00000000 10000001 after reset,n=11111111 10000001 结论:任何二进制位与 0异或,保持不变;与 1异或,对应位 翻转。 4)左移、右移运算实现将一个数的各个二进制位向左、向 右移若干位。 左移:将一个数的各个二进制位左移若干位,高位左移 后舍弃,低位补 0 。 若定义 : int a=8; 即 a= 0000 1000 , 则语句 a=a<2 ; 将 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*/ 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 特别提示:使用位段时,要注意该位段的能表示的数据的范围。 4位段的应用 编程模拟一个温度测控系统:从键盘输入模拟温 度的采样值( 0255),该采样值与 0.2相乘, 得出实际温度值,根据该温度值,控制温度指 示灯的亮与灭(从 0度开始,温度每增加 10度 则多点亮一个指示灯);将该温度值与设定温 度比较,当温度小于 10度和高于 40度时分别开 启升温设备和降温设备,同时报警。反复以上 过程,直至输入的测温值为 300为止。 分析:系统中需要控制的设备有:五个温度指示灯,升温设备, 降温设备,报警设备。因此可用如下的结构体变量 word表 示该系统的控制字,其成员构成如下: ( 1)无符号整型 tem1 用来存放输入的温度采样值( 0255), 若每个刻度代表 0.2度,则可以测量的温度范围为 051度。 浮点类型的成员 tem2用来存放 tem1成员转换成的温度值。 ( 2)四个位段存放(要输出的)控制数据。其中,位段 lmp 宽度为 5,控制五个温度指示灯,值为 1时灯亮,为 0时灯不 亮。其余的 3个位段 sw1、 sw2、 alm宽度均为 1,分别控制升 温设备、降温设备和报警设备,都是为“ 1”时开启,为 0时 关闭。 函数 sample()实现测温采样:通过键盘输入模拟测温数据,并 转换成实际温度值。 函数 control()实现输出控制:通过屏幕显示和喇叭鸣笛的方式 输出温度值、温度级别、设备开关情况和报警状态。 #define ON 1 #define OFF 0 struct 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( /*温度采样 */ / *生成温度指示灯控制位 */ word.lmp=(0 xffff<<(int)word.tem2/10); /*生成升温、降温设备及报警设备的控制位 */ if(word.tem2<10) word.alm=ON; word.sw1=ON; word.sw2=OFF; else if(word.tem2tem1); if(wp-tem1=300) exit(0); wp-tem2=wp-tem1*0.2; 说明: 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 /*用 *表示温度指示灯亮 */ printf(%4s,wp-sw1?ON:OFF); /*用 ON表示开启,用 OFF表示关闭 */ printf(%4s,wp-sw2?ON:OFF); printf(%6s,wp-alm?ONx07:OFFx20);

注意事项

本文(C++课件:第12章位运算.ppt)为本站会员(san****019)主动上传,装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知装配图网(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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