版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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)
2、; 代替3条语句程序清单程序清单方案三:乘除运算,是把第一个变量当缓冲变量用。void swap3(int *a,int *b) *a=(*a)*(*b); *b=(*a)/(*b);/b中放原来a中的值 *a=(*a)/(*b); / 用这1条语句a = a + b - (b = a); 代替3条语句程序清单程序清单方案四:异或运算。#include stdio.hvoid swap4(int *a,int *b) *a=*a*b; *b=*a*b; *a=*a*b;int main() int a=123,b=321; swap1(&a,&b);printf(a=%d,b=
3、%dn,a,b); swap2(&a,&b); printf(a=%d,b=%dn,a,b); swap3(&a,&b); printf(a=%d,b=%dn,a,b);swap4(&a,&b);printf(a=%d,b=%dn,a,b); return 0;程序清单程序清单输出结果输出结果 a=321,b=123a=123,b=321a=321,b=123a=123,b=321说明v 位运算符中除了“” 以外,均为二元运算符。v 运算量应为整型或字符型的数据。9.1 位运算符 位(bit):二进制位是计算机中最小的信息单位:n位二进制能表达2
4、n个信息。 9.1.1 按位与运算(&)第7位第6位第5位第4位第3位第2位第1位第0位MSB LSB10010101做中学做中学9-1 9-1 设有设有X=10X=10,Y=8Y=8,Z=X&YZ=X&Y(按位与),求(按位与),求Z Z的值。的值。#includevoid main() int X=10,Y=8; int Z; Z=X&Y; printf(“Z=%dn”;Z);程序清单程序清单输出结果输出结果 Z=8知识点运算规则 只有对应的位都为1时,按位与运算的结果才为1,其他的情况均为0,即: 0&0=0 0&1=0 1&0=0
5、 1&1=1 示例分析:X=(10)10=(00001010)2,Y=(8)10=(00001000)2 X00001010&Y00001000 Z00001000按位与运算的用途v 可以对某位进行清0操作 方法:将需要清0的对应位与0进行按位与操作即可。 如:若将00010011的低四位清0,只需将其低4位与0相与,高4位与1相与即可,也就是进行以下操作: 00010011&11110000 00010000可以提取指定位 方法:将需要提取的位与1进行按位与操作即可 如:假设有X=l0101110B,想取X的低4位。将X与Y=00001111B相与,即可得到X的低4位
6、。则有: 10101110&00001111 00001110#includevoid main() int X=12,Y=9; int Z; Z=X|Y; printf(“Z=%dn”;Z);程序清单程序清单输出结果输出结果 Z=139.1.2 按位或运算(|)做中学做中学9-2 9-2 假设有假设有X=12X=12,Y=9Y=9,Z= X | YZ= X | Y(按位或),则求(按位或),则求Z Z 的值。的值。知识点运算规则 只有对应的位都为0时,按位或运算的结果才为0,其他的情况均为1,即:0|0=0 0|1=1 1|0=1 1|1=1 示例分析:X=(12)10=(00001
7、100)2,Y=(9)10=(00001001)2 X00001100|Y00001001 Z00001101位或运算的用途 主要是对数据的某些位进行置1操作。 方法:将需要置1的位与1进行按位或操作即可。 如:假设有X=11010010B,想使X的低4位为l。可将X与Y=0000llllB按位相或。则有: 11010010|00001111 11011111#includevoid main() int X=10,Y=8; int Z; Z=XY; printf(“Z=%dn”;Z);程序清单程序清单输出结果输出结果 Z=29.1.3 按位异或运算()做中学做中学9-3 9-3 设有设有X=
8、10X=10,Y=8Y=8,Z=XYZ=XY(按位异或),求(按位异或),求Z Z的值。的值。知识点运算规则 参与按位异或运算的两个二进制位如果值相同,则结果为0,如果不同则结果为1.即: 00=0 01=1 10=1 11=0示例分析:X=(10)10=(00001010)2,Y=(8)10=(00001000)2根据“异或”的运算规则,有: X00001010Y00001000 Z00000010按位异或运算的用途v 与0异或,可以保留原值 方法:原数中的1与0进行异或运算得1,0与0异或运算的0。 例如:将29与0按位异或可以保留29。具体如下: 0001110100000000 000
9、11101v 将特定位翻转方法:要翻转的位与1异或运算,其余位与0异或运算。例如:假设有X=10101110B,则想使X的低4位翻转。根据“按位异或“的运算规则,可将X与Y00001111B按位相异或,则有: 1010111000001111 10100001v 实现两个变量值的交换 9.1任务引例的方案四就是利用异或运算完成了两个变量值的交换。 例如:a=5,b=4,利用异或运算完成a=4,b=5。具体如下: a=ab=101100=001 b=ab=001100=101 a=ab=101001=100 完成了a,b的交换。#includevoid main() int X=10; int
10、Z; Z=X; printf(“Z=%dn”;Z);程序清单程序清单输出结果输出结果 Z=119.1.4 按位取反运算()做中学做中学9-4 9-4 设有设有X=10X=10,Z=XZ=X(按位取反),求(按位取反),求Z Z的值。的值。知识点运算规则 对一个二进制数按位取反,即将0变为l,1变为0。 示例分析:X=(10)10=(00001010)2,根据“取反”的运算规则,有:即Z=X=(11110101)2=(-11)10X00001010 Z11110101注意事项v 单目运算符,具有右结合性;v 运算符的优先级别最高。 9.1.5 左移运算()语法格式:an运算规则:在移位过程中,各
11、个二进制位顺序向左移动,右端空出的位补0,移出左端之外的位则被舍弃。 例如:假没有X=10,其二进制的存储形式为00001010,将X左移2位,即X=X2,求X的值。 9.1.6 右移运算(n运算规则:v 对于无符号数最高位即左端空出的位一律补0;v 对于有符号数:正数则最高位补0,如果为负数,左端最高位补0还是补1则取决于所用的C编译系统。v 例如:有数X=10010001B X1:01001000B(逻辑右移) X1:11001000B(算术右移)#include void main() int x,y; printf(请输入一个16进制表示的正整数:); scanf(%x,&x)
12、; y=0; y=y; y4; x&=y; printf(该数的4-7位用十六进制表示是:%xn,x);程程序序清清单单9.1.7 复合赋值位运算做中学做中学9-5 9-5 将变量将变量x x的的 4-74-7位看成一个整数值,求这个值的大小。位看成一个整数值,求这个值的大小。程序运行程序运行 请输入一个16进制表示的正整数:acde该数的4-7位用十六进制表示是:d边学边练边学边练将十进制数转换为二进制形式。编写一个位运算演示器,该程序能演示计算机中每位二进制位运算的运算过程。拓展提升拓展提升9.2 位段9.2.1 位段的定义位段的语法格式: struct 位段名位段成员列表;位段列
13、表的格式: 类型说明符 位段成员名:位段长度; 如:struct wd int a:9; int b:3; int c:0; /*空域*/ unsigned d:5; /*从下一内存单元开始存放*/ int i;/在Turbo C中i为16位 unsigned :8; /无名位段成员说明v 位段的成员类型必须为unsigned或int型;位数为1的位段只能用unsigned。v 每个位段成员的长度不能超过字长(Turbo C中字长为16位,即一个存储单元为16位),所有位段成员的总长度可以超过字长。v 长度为0的位段叫空域,其作用是使下一个位段在下一个存储单元中开始存放。v 各个位段必须依次单
14、独定义,不能把几个位段组织成数组。v 位段可以含无名成员,这时它只用来作填充或调整位置,无名的位段成员是不能使用的。v 位段结构中可以包含整型变量或数组成员,但变量或数组名后不能跟冒号和位数,系统自动将他们从新的存储单元开始存放。v 位段结构变量可以按位段初始化,初值表中,不需要初始化的位段用逗号跳过。9.2.2 位段的引用位段的引用和结构成员的引用相同。一般形式为: 位段变量名. 位段成员名位段成员名使用与一般变量的使用一样,可以进行相应的运算。做中学做中学9-6 9-6 位段成员的输出。位段成员的输出。#include void main() struct unsigned a:1; unsigne
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年广西国际商务职业技术学院单招职业适应性测试题库附答案详细解析
- 校园欺凌工作制度措施方案
- 2026年郑州商贸旅游职业学院单招职业技能考试题库有答案详细解析
- 2026年日照航海工程职业学院单招综合素质考试题库含答案详细解析
- 2026年贵州轻工职业技术学院单招综合素质考试题库有答案详细解析
- 2026年广西职业师范学院单招综合素质考试题库含答案详细解析
- 2026年长白山职业技术学院单招综合素质考试题库含答案详细解析
- HY/T 0459-2024海岛生态脆弱性评价技术指南
- 企业内部保密审查制度手册规范(标准版)
- 胃癌化疗病人的护理策略
- 2026年江苏经贸职业技术学院单招综合素质考试题库附答案详解
- 2026河北衡水恒通热力有限责任公司公开招聘工作人员28名笔试备考试题及答案解析
- 2026春统编版(新教材)小学道德与法治一年级下册(全册)各单元知识点复习课件
- 吉水县2026年面向社会公开招聘农村(社区)“多员合一岗”工作人员【146人】笔试备考试题及答案解析
- 《工程勘察设计收费标准》(2002年修订本)-完整版-1
- 电子元器件选型规范
- 多彩贵州,魅力贵州
- 厦门医学院辅导员考试真题2022
- 有限公司450m3高炉项目初步设计安全专篇
- 热学李椿 电子
- 教学能力比赛决赛 《英语》教案
评论
0/150
提交评论