《(高职)C语言程序设计模块九位操作训练ppt课件.pptx》由会员分享,可在线阅读,更多相关《(高职)C语言程序设计模块九位操作训练ppt课件.pptx(28页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C语言程序设计模块九位操作训练ppt课件模块九模块九 位操作训练位操作训练能力目标 理解位运算的含义及使用方法; 了解位段的定义、存储及使用方法。知识准备知识准备引例任务 不用第三个变量,完成两个变量值的交换。不用第三个变量,完成两个变量值的交换。方案一:传统算法是通过第三个变量完成交换。#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
2、;/ 用这1条语句a = a + b - (b = a); 代替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(&
3、a,&b);printf(a=%d,b=%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个信息。 第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 1&1=1 示例分析:X=(10)10=(00001010)2,Y=(8)10=
5、(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位。则有: 10101110&00001111 00001110#includevoid main()
6、int X=12,Y=9; int Z; Z=X|Y; printf(“Z=%dn”;Z);程序清单程序清单输出结果输出结果 Z=139.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=(00001100)2,Y=(9)10=(00001001)2 X00001100|Y00001001 Z00001101
7、 位或运算的用途 主要是对数据的某些位进行置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.3 按位异或运算()做中学做中学9-2 9-2 设有设有X=10X=10,Y=8Y=8,Z=XYZ=XY(按位异或),求(按位异或),求Z Z的值。的值。知识点 运算规则
8、 参与按位异或运算的两个二进制位如果值相同,则结果为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 00011101v 将特定位翻转方法:要翻转的位与1异或运算,其余位与0异或运算。例如:假设有X=1010111
9、0B,则想使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 Z; Z=X; printf(“Z=%dn”;Z);程序清单程序清单输出结果输出结果 Z=119.4 按位
10、取反运算()做中学做中学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.5 左移运算() 语法格式:an 运算规则:在移位过程中,各个二进制位顺序向左移动,右端空出的位补0,移出左端之外的位则被舍弃。 例如:假没有X=10,其二进制的存储
11、形式为00001010,将X左移2位,即X=X2,求X的值。 9.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); y=0; y=y; y4; x&=y; printf(该数的4-7位用十六进制表示是:%xn,x);程程序序清清单单9.7 复合赋值位运算做中学做中学9-5 9-5 将变量将变量x x的的 4-74-7位看成一个整数值,求这个值的大小。位看成一个整数值,求这个值的大小。程序运行程序运行 请输入一个16进制表示的正整数:acde该数的4-7位用十六进制表示是:d边学边练边学边练 将十进制数转换为二进制形式。 编写一个位运算演示器,该程序能演示计算机中每位二进制位运算的运算过程。总结归纳总结归纳 定义功能 位运算符 位段
限制150内