版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章面向对象(上)模块一顺序程序设计训练-9-课题名称模块九位操作训练计划学时4学时内容分析位操作是程序设计中对位模式按位或二进制数的一元和二元操作。C语言中共有6种位运算符。位运算主要用在检测和控制领域的程序设计中。教学目标及基本要求(1)理解位运算的含义及使用;(2)了解位段的定义、存储及使用。教学重点按位与(&)、按位或(|)、按位异或(^)、按位取反(~)及移位(>>、<<)教学难点按位异或(^)、按位取反(~)教学方式教学采用教师课堂讲授与学生操作练习共同进行的一体化教学方式概念性知识点:提出为什么,将抽象具体化,配合教学PPT、案例辅助讲解。操作性知识点:提需求,并上机演示如何操作,重点内容总结经验及注意事项。学生操作练习:完成教材中的引例、做中学以及练中学案例,有能力的学生还可以完成教师额外布置的拓展练习题目。教学过程第一、二、三学时(按位与、按位或、按位异或、按位取反、移位)一、引例任务,提出需求(1)通过引力任务,引出本节所需知识内容。【引例任务】不用第三个变量,完成两个变量值的交换。方案一:传统算法是通过第三个变量完成交换。【程序代码】voidswap1(int*a,int*b){
inttemp;
temp=*a;
*a=*b;
*b=temp;}方案二:加减运算,把第一个变量当缓冲变量用。【程序代码】voidswap2(int*a,int*b){
*a=*a+*b;
*b=*a-*b;//b中放原来a中的值
*a=*a-*b;//用这1条语句a
=
a
+
b
-
(b
=
a);
代替3条语句}方案三:乘除运算,是把第一个变量当缓冲变量用。【程序代码】voidswap3(int*a,int*b){
*a=(*a)*(*b);
*b=(*a)/(*b);//b中放原来a中的值
*a=(*a)/(*b);//用这1条语句a
=
a
+
b
-
(b
=
a);
代替3条语句}方案四:异或运算。【程序代码】#include"stdio.h"voidswap4(int*a,int*b){
*a=*a^*b;
*b=*a^*b;
*a=*a^*b;}intmain(){
inta=123,b=321;
swap1(&a,&b);printf("a=%d,b=%d\n",a,b);swap2(&a,&b);printf("a=%d,b=%d\n",a,b);
swap3(&a,&b);
printf("a=%d,b=%d\n",a,b);swap4(&a,&b);printf("a=%d,b=%d\n",a,b);
return0;}【程序运行】a=321,b=123a=123,b=321a=321,b=123a=123,b=321(2)明确学习方向。【知识点】按位与(&)运算按位或(|)运算按位异或(^)按位取反(~)移位(>>、<<)运算复合赋值位运算【能力点】理解位运算的含义及使用了解位段的定义、存储及使用明确目标,完成任务一般用字节(Byte)作为计算机信息的基本单位,一B由8个二进制位组成,其中最右边的一位称为“最低有效位”LSB,最左边的一位称为“最高有效位”MSB。最低有效位也称第0位,最高有效位也称第7位。通常用1字节、2字节、4字节、8字节表示一个信息。例如,用l字节表示一个英文字符,2字节表示一个汉字字符,4字节表示一个实数等等。1.按位与运算(&)【做中学9-1】〖〗设有X=10,Y=8,Z=X&Y(按位与),求Z的值。【程序代码】#include<stdio.h>voidmain(){intX=10,Y=8;intZ;Z=X&Y;printf(“Z=%d\n”;Z);}1)运算规则只有对应的位都为1时,按位与运算的结果才为1,其他的情况均为0,即:0&0=00&1=01&0=01&1=12)按位与运算的用途(1)可以对某位进行清0操作方法:将需要清0的对应位与0进行按位与操作即可。(2)可以提取指定位方法:将需要提取的位与1进行按位与操作即可按位或运算(|)【做中学9-2】假设有X=12,Y=9,Z=X|Y(按位或),则求Z的值。【程序代码】#include<stdio.h>voidmain(){intX=12,Y=9;intZ;Z=X|Y;printf(“Z=%d\n”;Z);}1)运算规则只有对应的位都为0时,按位或运算的结果才为0,其他的情况均为1,即:0|0=00|1=11|0=11|1=12)按位或运算的用途主要是对数据的某些位进行置1操作。方法:将需要置1的位与1进行按位或操作即可。按位异或运算(^)【做中学9-3】设有X=10,Y=8,Z=X^Y(按位异或),求Z的值。【程序代码】#include<stdio.h>voidmain(){intX=10,Y=8;intZ;Z=X^Y;printf(“Z=%d\n”;Z);}1)运算规则参与按位异或运算的两个二进制位如果值相同,则结果为0,如果不同则结果为1.即:0^0=00^1=11^0=11^1=02)按位异或运算用途(1)与0异或,可以保留原值方法:原数中的1与0进行异或运算得1,0与0异或运算的0。(2)将特定位翻转方法:要翻转的位与1异或运算,其余位与0异或运算。、(3)实现两个变量值的交换【引例任务】的方案四就是利用异或运算完成了两个变量值的交换。按位取反运算(~)【做中学9-4】设有X=10,Z=~X(按位取反),求Z的值。【程序代码】#include<stdio.h>voidmain(){intX=10;intZ;Z=~X;printf(“Z=%d\n”;Z);}1)运算规则对一个二进制数按位取反,即将0变为l,1变为0。2)注意事项(1)单目运算符,具有右结合性;(2)~运算符的优先级别最高。5.左移运算(<<)语法格式:a<<n其中:a是操作数,可以是一个char或整型的变量或表达式;n是移位次数,必须是正整数。功能是将a中所有的二进制位数向左移动n位。运算规则:在移位过程中,各个二进制位顺序向左移动,右端空出的位补0,移出左端之外的位则被舍弃。6.右移运算(>>)语法格式:a>>n其中:a是操作数,可以是一个char或整型的变量或表达式;n是移位次数,必须是正整数。功能是将a中所有的二进制位数向右移动n位。运算规则:在移位过程中,各个二进制位顺序向右移动,移出右端之外的位则被舍弃,左端空出的位补0还是1取决于被移位的数是有符号数还是无符号数,具体为:(1)对于无符号数最高位即左端空出的位一律补0;(2)对于有符号数:正数则最高位补0,如果为负数,左端最高位补0还是补1则取决于所用的C编译系统。如果补0则称为“逻辑右移”,补l则称为“算术右移”。7.复合赋值位运算位运算符与赋值运算符相结合,就组成复合赋值运算符。【做中学9-5】将变量x的4-7位看成一个整数值,求这个值的大小。【程序代码】#include<stdio.h>voidmain(){intx,y;printf("请输入一个16进制表示的正整数:");scanf("%x",&x);y=0;y=~y;y<<=4;y=~y;//低4位全为1,其余位为0x=x>>4;x&=y;printf("该数的4-7位用十六进制表示是:%x\n",x);}三、归纳总结,布置课后作业(1)回顾上课前的学习目标,对本节课知识点进行总结。(2)扫描二维码查看相应资源,完成课后实训题。第四学时(边学边练、实训题)一、上机练习【能力点】理解位运算的作用理解和掌握位运算的应用掌握位段的定义及使用【练中学9-1】将十进制数转换为二进制形式。【程序代码】#include<stdio.h>voidputbit(intz,intn){ inti; for(i=n-1;i>=0;i--)/*从高位到低位逐位转换成字符0和1并输出到屏幕*/ putchar('0'+(1&z>>i));}voidmain(){ intx; printf("请输入一个十进制整数。"); scanf("%d",&x);printf("对应的二进制数是:");putbit(x,sizeof(int)*8); printf("\n");}【练中学9-2】编写一个位运算演示器,该程序能演示计算机中每位二进制位运算的运算过程。。【程序代码】#include"stdio.h"voidputbit(intz,intn){ inti; for(i=n-1;i>=0;i--)/*从高位到低位逐位转换成字符0和1并输出到屏幕*/ putchar('0'+(1&z>>i));}voidmain(){ charf; inta,b; voidys(char,int,int); voidfys(int); f='|'; printf("\n用户输入位运算表达式格式如下:"); printf("\n格式1:双目运算符(&,|,^)整型常量1整型常量2");printf("\n格式2:单目运算符(~)整型常量"); while(f!='e'){ printf("\n请输入:"); scanf("%c",&f); if(f=='e')break; scanf("%d",&a); if(f!='~')scanf("%d",&b); if(f=='~')fys(a); if(f=='&'||f=='|'||f=='^')ys(f,a,b); }}voidys(charfh,intx,inty){ intz; printf("\n运算前%d:\t",x); putbit(x,sizeof(int)*8); printf("对应16进制数%X",x); printf("\n运算前%d:\t",y); putbit(y,sizeof(int)*8); printf("对应16进制数%X",y);if(fh=='&')z=x&y;if(fh=='|')z=x|y;if(fh=='^')z=x^y; printf("\n运算后%d%c%d:\t",x,fh,y); putbit(z,sizeof(int)*8); printf("对应16进制数%X",
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 店面租赁合同范本的完整版
- 2024年艺术涂料销售合同模板范本
- 仓库租赁合同书格式
- 报刊亭加工安装合同范本
- 新版职工入职协议书
- 食堂承包合同书范例
- 药店转让合同范本
- 个人信用借款合同补充协议书范本
- 工程规划设计合同
- 钢筋工入场安全教育试卷及答案
- 施工图预算的编制工作规范
- 日立电梯MCA调试培训课件
- 电动客车驱动桥总成设计
- 四川省阿坝藏族羌族自治州《综合知识》事业单位国考真题
- 2023年人民法院电子音像出版社招聘笔试题库及答案解析
- 大学生心理健康优秀说课-比赛课件
- 收款账户变更的声明
- 九年级道德与法治中考复习资料
- 《化学发展简史》学习心得
- 班组建设与班组长管理技巧课件
- 签派员执照考试题库汇总-8签派和实践应用
评论
0/150
提交评论