C语言 位运算PPT学习教案_第1页
C语言 位运算PPT学习教案_第2页
C语言 位运算PPT学习教案_第3页
C语言 位运算PPT学习教案_第4页
C语言 位运算PPT学习教案_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、会计学1C语言语言 位运算位运算第1页/共49页第2页/共49页第3页/共49页第4页/共49页& 按位与按位与| 按位或按位或 按位异或按位异或 取反取反 右移右移位逻辑运算符位逻辑运算符位移运算符位移运算符第5页/共49页1. 只作用于整型或字符型的数据,不能为只作用于整型或字符型的数据,不能为实型数据。实型数据。2. 作用于整型、字符型数据的每个二进制作用于整型、字符型数据的每个二进制位,不是数的整体。位,不是数的整体。3. 一般逻辑运算是作用数的整体,不是数一般逻辑运算是作用数的整体,不是数的每个二进制位,运算结果是二进制数。的每个二进制位,运算结果是二进制数。4. 除除“”以外,均为

2、二目(元)运算符。以外,均为二目(元)运算符。第6页/共49页1. 运算规则运算规则: 0&0=0 1&0=0 0&1=0 1&1=1 只要对应位上的值均为只要对应位上的值均为1则该位上的结果值为则该位上的结果值为1。2. 特殊作用特殊作用: 将一个存储单元各位清将一个存储单元各位清0。 取某个数中的某些位。取某个数中的某些位。 方法:将本数与某个特定数按位与运算即可。方法:将本数与某个特定数按位与运算即可。第7页/共49页第8页/共49页1. 运算规则运算规则: 0|0=0 1|0=1 0|1=1 1|1=1 只要对应位上的值其中一个为只要对应位上的值其中一个为1则该位上的结果则该位上的结果

3、值为值为1。2. 特殊作用特殊作用: 常用于将一个数的某些特定位置为常用于将一个数的某些特定位置为1方法:将本数与某个特定数按位或运算即可。方法:将本数与某个特定数按位或运算即可。第9页/共49页第10页/共49页1. 运算规则运算规则: 00=0 10=1 01=1 11=0只要对应位上的值互不相同则该位上的结果值为只要对应位上的值互不相同则该位上的结果值为1。 2. 特殊作用特殊作用: 使某些特定位翻转。使某些特定位翻转。 任何数与任何数与0相异或结果保留原数本身。相异或结果保留原数本身。 交换两个变量的值不用中间变量。交换两个变量的值不用中间变量。 a=ab; b=ba; a=ab;注意

4、给变量赋值的先后顺序。注意给变量赋值的先后顺序。第11页/共49页第12页/共49页1. 运算规则运算规则: 0=1 1=0对每个上的值按位求反:对每个上的值按位求反:1变为变为0;0变为变为1。例如例如9的运算为:的运算为: (0000000000001001)结果为:结果为: 1111111111110110第13页/共49页注意:注意:运算符比算术运算、关系运算、逻运算符比算术运算、关系运算、逻辑运算和其它运算的优先级别都高。辑运算和其它运算的优先级别都高。 例如:例如: a&b 先进行先进行a运算,然后进行运算,然后进行&运算。运算。第14页/共49页1. 运算规则运算规则: a=an

5、 将将a中所有位向右移动中所有位向右移动n位。位。2. 运算的作用运算的作用 相当于除法运算。右移一位相当于除以相当于除法运算。右移一位相当于除以2。第17页/共49页【注意注意】注意数的符号问题注意数的符号问题即正负的问题即正负的问题。对于无符号数对于无符号数正数正数右移时高位补以右移时高位补以0。对于有符号数,高位为对于有符号数,高位为0正数正数右移时高位补以右移时高位补以0。对于有符号数,高位为对于有符号数,高位为1负数负数时:时: 右移时高位补以右移时高位补以0,称之为,称之为“逻辑位移逻辑位移”。 右移时高位补以右移时高位补以1,称之为,称之为“算术位移算术位移”。TC采用采用“算术

6、位移算术位移”,高位补以,高位补以1。第18页/共49页位运算符与赋值运算符可以组成复合赋值位运算符与赋值运算符可以组成复合赋值运算符如运算符如: &=, |=, =, =, =例如:例如: a & = b 相当于:相当于:a = a & b a =2 相当于:相当于:a = a 4第21页/共49页 设置一个低设置一个低4位全为位全为1,其余全为其余全为0的数。可用下的数。可用下面方法实现面方法实现: ( 0 4 )0的全部二进制为全的全部二进制为全1,左移,左移4位,这样右端低位,这样右端低4位为位为0。见下面所示:。见下面所示:0:00000000000: 111111111104:11

7、11110000(0 4) & ( 0 4 )根据上一节介绍的方法,与低根据上一节介绍的方法,与低4位为位为1的数进行的数进行&运运算,就能将这算,就能将这4位保留下来。位保留下来。第23页/共49页程序如下:程序如下:main() unsigned a,b,c,d; scanf(%o,&a); b=a4; c=(04); d=b&c; printf(%o, %dn%o, %dn,a,a,d,d);第24页/共49页运行情况如下:运行情况如下: 331 331, 217(a的值的值) 15, 13 (d的值的值)输入输入a的值为八进制数的值为八进制数331, 即十进制数即十进制数217, 其二

8、进制形式为其二进制形式为11011001。经运算最后得到的。经运算最后得到的d为为00001101,即八进制数,即八进制数15,十进制数,十进制数13。第25页/共49页如果任意指定从右面第如果任意指定从右面第m位开始取其右面位开始取其右面n位。位。只需将程序中的只需将程序中的“b=a4”改成改成“b=a(m-n+1)”以及将以及将“c=(04)”改成改成“c=(0n)”即可。即可。第26页/共49页【例例11.5】循环移位。要求将循环移位。要求将a进行右循环进行右循环移位移位n位,见图。位,见图。即将即将a中原来左面中原来左面(16-n)位右移位右移n位,原来右端位,原来右端n位移到最左面位

9、移到最左面n位。假设用两个字节存放一个整数。位。假设用两个字节存放一个整数。第27页/共49页为实现以上目的可以用以下步骤:为实现以上目的可以用以下步骤: 将将a的右端的右端n位先放到位先放到b中的高中的高n位中。可以用下位中。可以用下面语句实现:面语句实现: b=a(16-n); 将将a右移右移n位,其左面高位位,其左面高位n位补位补0。可以用下面。可以用下面语句实现:语句实现: c=an; 将将c与与b进行按位或运算。即进行按位或运算。即 c=c|b;第28页/共49页程序如下:程序如下:main ( ) unsigned a,b,c; int n; scanf(a=%o,n=%d,&a,

10、&n); b=a(16-n); c=an; c=c|b; printf(%on%o,a,c);第29页/共49页运行情况如下:运行情况如下:a=157653,n=3 157653 75765运行开始时输入八进制数运行开始时输入八进制数157653,即二进制数,即二进制数1101111110101011,循环右移,循环右移3位后得二进位后得二进制数制数0111101111110101,即八进制数,即八进制数75765。同样可以同样可以左循环位移左循环位移。第30页/共49页 以前曾介绍过对内存中信息的存取一般以字节为以前曾介绍过对内存中信息的存取一般以字节为单位。实际上,有时存储一个信息不必用一

11、个或单位。实际上,有时存储一个信息不必用一个或多个字节,例如,多个字节,例如,“真真”或或“假假”用用0或或1表示表示,只需,只需1位即可。在计算机用于过程控制、参数位即可。在计算机用于过程控制、参数检测或数据通信领域时,控制信息往往只占一个检测或数据通信领域时,控制信息往往只占一个字节中的一个或几个二进位,常常在一个字节中字节中的一个或几个二进位,常常在一个字节中放几个信息。那么,怎样向一个字节中的一个或放几个信息。那么,怎样向一个字节中的一个或几个二进位赋值和改变它的值呢?几个二进位赋值和改变它的值呢?第31页/共49页 可以用以下两种方法:可以用以下两种方法: (1) 可以人为地在一个字

12、节可以人为地在一个字节data中设几项。中设几项。 例如:例如:a、b、c、d分别占分别占2位、位、6位、位、4位、位、4位位(见图见图)。第32页/共49页如果想将如果想将c的值变为的值变为12(设设c原来为原来为0),可以这样,可以这样: 将数将数12左移左移4位,使位,使1100成为右面起第成为右面起第47位。位。 将将data与与“124” 进行进行“按位或按位或” 运算,运算,即可使即可使c的值变成的值变成12。如果如果c的原值不为的原值不为0,应先使之为,应先使之为0。可以用下面方。可以用下面方法:法: data=data & 0177417第33页/共49页0177417的二进制

13、表示为:的二进制表示为:11 11111 1 0000 1111 a b c d也就是使第也就是使第47位全为位全为0,其他位全为其他位全为1。它与。它与data进行进行 &运算运算,使第使第47位为位为0,其余各位保留其余各位保留data的原状。这个的原状。这个177417称为称为“屏蔽字屏蔽字”,即把即把c以外的信息屏蔽起来以外的信息屏蔽起来,不受影响不受影响,只使只使c改变为改变为0。第34页/共49页但要找出和记住但要找出和记住177417这个数比较麻烦。这个数比较麻烦。可以用可以用data=data & ( 15 4 );15是是c的的最大值最大值,c共占共占4位位,最大值为最大值为

14、1111即即15。154是将是将1111移到移到47位。位。 再取反再取反,就使就使47位变位变成成0,其余位全是其余位全是1。即。即15:000000000000111115 4:0000000011110000 ( 15 4 ):1111111100001111这样可以实现对这样可以实现对c清清0,而不必计算屏蔽码。而不必计算屏蔽码。第35页/共49页将上面几步结合起来将上面几步结合起来,可以得到可以得到data=data & ( 15 4 )| ( n & 15 ) 4;n为应赋给为应赋给c的值的值(例如例如12)。n & 15的作用是只的作用是只取取n的右端的右端4位的值位的值,其余各

15、位置其余各位置0,即把即把n放到最后放到最后4位上位上,( n & 15 ) 4, 就是将就是将n置在置在47位上位上。见下面。见下面:赋予赋予47位为位为0第36页/共49页data & (154): 11011011|0000|1010(n & 15)4: 00000000|1100|0000 (按位或运算按位或运算) 11011011|1100|1010可见可见,data的其他位保留原状未改变的其他位保留原状未改变,而第而第47位位改变为改变为12(即即1100)了。了。但是用以上办法给一个字节中某几位赋值太麻烦了但是用以上办法给一个字节中某几位赋值太麻烦了。可以用下面介绍的位段结构体的

16、方法。可以用下面介绍的位段结构体的方法。第37页/共49页(2) 位段位段C语言允许语言允许在一个结构体中以位为单位在一个结构体中以位为单位来指定其成来指定其成员所占内存长度,这种以位为单位的成员称为员所占内存长度,这种以位为单位的成员称为“位位段段”或称或称“位域位域” ( bit field) 。利用位段能够。利用位段能够用较少的位数存储数据。用较少的位数存储数据。 第38页/共49页例如:例如: structpacked-data unsigneda 2; unsignedb 6; unsignedc 4; unsignedd 4; inti;data;其中其中a、b、c、d分别占分别占

17、2位、位、6位、位、4位、位、4位。位。i为整型。共占为整型。共占4个字节。个字节。第39页/共49页也可以使各个位段不恰好占满一个字节。如:也可以使各个位段不恰好占满一个字节。如: structpacked-data unsigneda 2; unsignedb 3; unsignedc 4; inti; ; structpacked-datadata;第40页/共49页其中其中a、b、c共占共占9位,占位,占1个字节多,不到个字节多,不到2个字个字节。它的后面为节。它的后面为int型,占型,占2个字节。在个字节。在a、b、c之之后后7位空间闲置不用,位空间闲置不用,i从另一字节开头起存放。

18、从另一字节开头起存放。第41页/共49页注意,在存储单元中位段的空间分配方向,因机器注意,在存储单元中位段的空间分配方向,因机器而异。在微机使用的而异。在微机使用的C系统中,一般是系统中,一般是由右到左进由右到左进行分配的行分配的,如图。但用户可以不必过问这种细节。,如图。但用户可以不必过问这种细节。第42页/共49页对位段中的数据引用的方法。如:对位段中的数据引用的方法。如: data.a=2; data.b=7; data.c=9;注意位段允许的最大值范围注意位段允许的最大值范围。如果写如果写dataa=8;就错了。因为;就错了。因为data.a只占只占2位,最大值为位,最大值为3。在此情

19、况下,自动取赋予它的数。在此情况下,自动取赋予它的数的低位。例如,的低位。例如,8的二进制数形式为的二进制数形式为1000,而,而dataa只有只有2位,取位,取1000的低的低2位,故位,故dataa得值得值0。第43页/共49页关于位段的定义和引用,有几点要关于位段的定义和引用,有几点要说明说明:位段成员的类型必须指定为位段成员的类型必须指定为unsigned或或int类型。类型。若某一位段要从另一个字开始存放。可以用以若某一位段要从另一个字开始存放。可以用以下形式定义:下形式定义: unsigneda 1; unsignedb 2; 一个存储单元一个存储单元 unsigned 0; unsignedc 3; (另一存储单元另一存储

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论