第9章位运算.ppt

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9章位运算资料

第9章 位运算 教学目标: 理解位运算的概念,熟练掌握位运算的应用 理解字段的概念,掌握字段的应用 作为位运算应用,扩充键盘输入功能,添加光标移动函数,实现§7.8.5的设计目标。 第9章 位运算 9.1位运算和位运算符 9.2 字段 9.3 位运算的综合应用:编辑器第三版 9.1位运算和位运算符 位运算:对一个数据的某些二进制位进行的运算。每个二进制位只能存放1位二进制数“0”或者“1”。通常把组成一个数据的最右边的二进制位称做第0位,从右到左以此称为第1位,第2位……最左边一位称做最高位,如图9-1所示。 9.1.1 按位取反运算符“~” 9.1.2 按位与运算符“” “按位与”运算的应用——位清零 “按位与”运算的应用 ——测试指定位的值 “按位与”运算的应用 ——获取指定位的值 练习 9.1.3 按位或运算符“|” 按位或运算符“|”的应用 9.1.4 按位异或运算符“^” 按位异或运算符“^” 的应用 9.1.5 左移运算符“” 左移运算举例 分析及结论 对于a和d,左移1位相当于乘2,左移3位相当于乘8,而对于b和c结论则不成立。这是为什么呢? 对于b来说,第14位的1被移出丢弃,相当与丢掉了8*8192(8*214)。对于c来说,本身是负数,移位结果变为了正数。或者说在移位的过程中发生了溢出。 结论:在不溢出的情况下,左移一位相当于乘2。如表9-2所示。 9.1.6 右移运算符“” 9.1.7 位复合赋值运算符 类似于算术运算的复合运算符,位运算符和赋值运算符也可以构成“复合赋值运算符”。如表9-3所示。 9.1.8 位运算的应用 函数bioskey()的说明 程序清单 #include stdio.h #include bios.h #define ESC 27 unsigned int key,low,hig; main( ) { while( 1 ){ printf(“请输入按键,(退出请按ESC键)\n”); while( bioskey(1)== 0); /*检测键盘是否有击键*/ key = bioskey(0); /*读取键盘输入的扫描码*/ low = key 0x00ff; /*提取低8位*/ hig = (key 0xff00)8;/*提取高8位*/ if(low == ESC)break; if(low != 0) printf(“你输入的是:%c, 对应的ASCII码是:%d\n”,low, low); else printf(“功能键或组合功能键, 高8位的扩充键盘码: 0x%x\n”,hig); } } 9.2 字段 在计算机里常常在一个字节中放几个信息。C语言提供两种方法,操作一个字节中的一个或几个二进制。 2.位 段 (3) 关于位段的说明 9.3 位运算的综合应用:编辑器第三版 9.4.2 优化程序tedit2.c 1. 修改操作提示语内容 2. 扩充键盘输入及功能分支框架 将tedit2.c中的循环接受用户输入程序段扩充为: do {while( bioskey(1)== 0); /*检测键盘直到有击键才结跳出循环*/ key = bioskey(0); /*读取键盘扫描码*/ low = key 0x00ff; /*取出低8位*/ hig = (key 0xff00)8;/*提取高8位*/ if(low == 0){ /*用户单击功能键*/ switch(hig){ ┅ /*执行光标移动功能*/ } } else { /*有效字符键*/ switch(low){ ┅ /*有效字*/ } } }while(low != 27); 9.4.3 添加光标移动函数 2. 光标右移函数right() 算法设计 (1) 当光标位于该屏幕行的最尾部时,操作无效;否则执行(2) (2) 光标横坐标和位置变量各加1(scrnx++;curloc++;)。 void right(void) {if(curloc==endloc || buf[curloc] == ‘\r’) return; /*光标位于该行的最右端,操作无效*/ scrnx++; /*光标横坐标加1 */ curloc++; /*当前位置变量加1*/ gotoxy(scrnx,scrny);

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档