C语言程序设计模块九位作训练课件

上传人:我*** 文档编号:142088933 上传时间:2020-08-16 格式:PPT 页数:31 大小:1.04MB
返回 下载 相关 举报
C语言程序设计模块九位作训练课件_第1页
第1页 / 共31页
C语言程序设计模块九位作训练课件_第2页
第2页 / 共31页
C语言程序设计模块九位作训练课件_第3页
第3页 / 共31页
C语言程序设计模块九位作训练课件_第4页
第4页 / 共31页
C语言程序设计模块九位作训练课件_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《C语言程序设计模块九位作训练课件》由会员分享,可在线阅读,更多相关《C语言程序设计模块九位作训练课件(31页珍藏版)》请在金锄头文库上搜索。

1、,知识准备,任务引例-不用第三个变量完成两个变量值的交换。 方案一:传统算法是通过第三个变量完成交换。,#void swap1(int *a,int *b) int temp; temp=*a; *a=*b; *b=temp; ,程 序 清 单,方案二:加减运算,把第一个变量当缓冲变量用。,void swap2(int *a,int *b) *a=*a+*b; *b=*a-*b;/b中放原来a中的值 *a=*a-*b;/ 用这1条语句a = a + b - (b = a); 代替3条语句 ,程序清单,方案三:乘除运算,是把第一个变量当缓冲变量用。,void swap3(int *a,int *

2、b) *a=(*a)*(*b); *b=(*a)/(*b);/b中放原来a中的值 *a=(*a)/(*b); / 用这1条语句a = a + b - (b = a); 代替3条语句 ,程序清单,方案四:异或运算。,#include stdio.h void swap4(int *a,int *b) *a=*a*b; *b=*a*b; *a=*a*b; int main() int a=123,b=321; swap1( ,程序清单,输出结果 a=321,b=123 a=123,b=321 a=321,b=123 a=123,b=321,说明 位运算符中除了“” 以外,均为二元运算符。 运算量应

3、为整型或字符型的数据。,9.1 位运算符 位(bit):二进制位是计算机中最小的信息单位:n位二进制能表达2n个信息。 9.1.1 按位与运算( int Z; Z=X ,程序清单,输出结果 Z=8,知识点,运算规则 只有对应的位都为1时,按位与运算的结果才为1,其他的情况均为0,即: 0 int Z; Z=X|Y; printf(“Z=%dn”;Z); ,程序清单,输出结果 Z=13,9.1.2 按位或运算(|),做中学9-2 假设有X=12,Y=9,Z= X | Y(按位或),则求Z 的值。,知识点,运算规则 只有对应的位都为0时,按位或运算的结果才为0,其他的情况均为1,即: 0|0=0

4、0|1=1 1|0=1 1|1=1 示例分析:X=(12)10=(00001100)2,Y=(9)10=(00001001)2,位或运算的用途 主要是对数据的某些位进行置1操作。 方法:将需要置1的位与1进行按位或操作即可。 如:假设有X=11010010B,想使X的低4位为l。可将X与Y=0000llllB按位相或。则有:,#include void main() int X=10,Y=8; int Z; Z=XY; printf(“Z=%dn”;Z); ,程序清单,输出结果 Z=2,9.1.3 按位异或运算(),做中学9-3 设有X=10,Y=8,Z=XY(按位异或),求Z的值。,知识点,

5、运算规则 参与按位异或运算的两个二进制位如果值相同,则结果为0,如果不同则结果为1.即: 00=0 01=1 10=1 11=0 示例分析:X=(10)10=(00001010)2,Y=(8)10=(00001000)2 根据“异或”的运算规则,有:,按位异或运算的用途 与0异或,可以保留原值 方法:原数中的1与0进行异或运算得1,0与0异或运算的0。 例如:将29与0按位异或可以保留29。具体如下:,将特定位翻转 方法:要翻转的位与1异或运算,其余位与0异或运算。 例如:假设有X=10101110B,则想使X的低4位翻转。 根据“按位异或“的运算规则,可将X与Y00001111B按位相异或,

6、则有:,实现两个变量值的交换 9.1任务引例的方案四就是利用异或运算完成了两个变量值的交换。 例如:a=5,b=4,利用异或运算完成a=4,b=5。具体如下: a=ab=101100=001 b=ab=001100=101 a=ab=101001=100 完成了a,b的交换。,#include void main() int X=10; int Z; Z=X; printf(“Z=%dn”;Z); ,程序清单,输出结果 Z=11,9.1.4 按位取反运算(),做中学9-4 设有X=10,Z=X(按位取反),求Z的值。,知识点,运算规则 对一个二进制数按位取反,即将0变为l,1变为0。 示例分析

7、:X=(10)10=(00001010)2,根据“取反”的运算规则,有: 即Z=X=(11110101)2=(-11)10,注意事项 单目运算符,具有右结合性; 运算符的优先级别最高。,9.1.5 左移运算(),语法格式:an 运算规则:在移位过程中,各个二进制位顺序向左移动,右端空出的位补0,移出左端之外的位则被舍弃。 例如:假没有X=10,其二进制的存储形式为00001010,将X左移2位,即X=X2,求X的值。,9.1.6 右移运算(),语法格式:an 运算规则: 对于无符号数最高位即左端空出的位一律补0; 对于有符号数:正数则最高位补0,如果为负数,左端最高位补0还是补1则取决于所用的

8、C编译系统。 例如:有数X=10010001B X1:01001000B(逻辑右移) X1:11001000B(算术右移),#include void main() int x,y; printf(请输入一个16进制表示的正整数:); scanf(%x, ,程 序 清 单,9.1.7 复合赋值位运算,做中学9-5 将变量x的 4-7位看成一个整数值,求这个值的大小。,程序运行 请输入一个16进制表示的正整数:acde 该数的4-7位用十六进制表示是:d,边学边练,将十进制数转换为二进制形式。 编写一个位运算演示器,该程序能演示计算机中每位二进制位运算的运算过程。,拓展提升,9.2 位段,9.2

9、.1 位段的定义,位段的语法格式: struct 位段名位段成员列表; 位段列表的格式: 类型说明符 位段成员名:位段长度; 如:struct wd int a:9; int b:3; int c:0; /*空域*/ unsigned d:5; /*从下一内存单元开始存放*/ int i;/在Turbo C中i为16位 unsigned :8; /无名位段成员 ,说明 位段的成员类型必须为unsigned或int型;位数为1的位段只能用unsigned。 每个位段成员的长度不能超过字长(Turbo C中字长为16位,即一个存储单元为16位),所有位段成员的总长度可以超过字长。 长度为0的位段叫

10、空域,其作用是使下一个位段在下一个存储单元中开始存放。 各个位段必须依次单独定义,不能把几个位段组织成数组。,位段可以含无名成员,这时它只用来作填充或调整位置,无名的位段成员是不能使用的。 位段结构中可以包含整型变量或数组成员,但变量或数组名后不能跟冒号和位数,系统自动将他们从新的存储单元开始存放。 位段结构变量可以按位段初始化,初值表中,不需要初始化的位段用逗号跳过。,9.2.2 位段的引用,位段的引用和结构成员的引用相同。一般形式为: 位段变量名. 位段成员名 位段成员名使用与一般变量的使用一样,可以进行相应的运算。,做中学9-6 位段成员的输出。,#include void main() struct unsigned a:1; unsigned b:3; int :3; unsigned c:4; bit,*pb; bit.a=1; bit.b=7; bit.c=15; printf(%d,%d,%dn,bit.a,bit.b,bit.c); pb= ,程序清单,输出结果 1,7,15 0 2 f,总结归纳,定义功能 位运算符 位段,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号