




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、12前面介绍的各种运算都是以字节作为最基前面介绍的各种运算都是以字节作为最基本单位进行的。本单位进行的。 但在很多系统程序中常要求但在很多系统程序中常要求在位在位(bit)一级进行运算或处理。语言提供一级进行运算或处理。语言提供了位运算的功能,这使得语言也能像汇编了位运算的功能,这使得语言也能像汇编语言一样用来编写系统程序。语言一样用来编写系统程序。3语言提供了六种位运算符语言提供了六种位运算符运算符运算符含义含义&按位与按位与|按位或按位或按位异或按位异或取反取反右移右移左移左移4 按位与运算符按位与运算符“&”是双目运算符。其功能是参与是双目运算符。其功能是参与运算的两数各
2、对应的二进位相与。只有对应的两运算的两数各对应的二进位相与。只有对应的两个二进位均为个二进位均为1时,结果位才为时,结果位才为1,否则为,否则为0。参。参与运算的数以与运算的数以补码补码方式出现。方式出现。 00001001(&) 00000101 00000001(9(9的二进制补码的二进制补码) )(5(5的二进制补码的二进制补码) )(1(1的二进制补码的二进制补码) )0&0=00&1=01&0=01&1=1例如:例如:9 9&5 5可写算式如下:可写算式如下: 可见可见9 9&5=15=1。5清零清零取一个数中的某些指定位取一个
3、数中的某些指定位 00101011(&) 01000100 0000000000101100 1010110000000000 1111111100000000 10101100abc00101100 1010110011111111 0000000000101100 00000000abcb=(377)8 c=a&bb=(177400)8 c=a&b6 想保留哪一位,就与一个数进行想保留哪一位,就与一个数进行&运算,此运算,此数在该位取数在该位取1 01010100(&) 00111011 00010000保留左面的保留左面的3、4、5、7、8位位7
4、按位或运算符按位或运算符“| |”是双目运算符。其功能是双目运算符。其功能是参与运算的两数各对应的二进位相或。是参与运算的两数各对应的二进位相或。只要对应的两个二进位有一个为只要对应的两个二进位有一个为1 1时,结果时,结果位就为位就为1 1。参与运算的两个数均以补码出现。参与运算的两个数均以补码出现。0| |0=00| |1=11| |0=11| |1=1例如:例如:9 9| |5 5可写算式如下:可写算式如下: 00001001(|) 00000101 00001101(9(9的二进制补码的二进制补码) )(5(5的二进制补码的二进制补码) )(13(13的二进制补码的二进制补码) )可见
5、可见9 9|5=135=13。8 常用来对一个数据的某些位定值为常用来对一个数据的某些位定值为1a|0377例如:例如:a是一个整数(是一个整数(16位),如果有下式位),如果有下式则低则低8位全置为位全置为1,高,高8位保留原样位保留原样9按位异或运算符按位异或运算符“”是双目运算符。其功能是参是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应与运算的两数各对应的二进位相异或,当两对应的二进位相的二进位相异异时,结果为时,结果为1。相。相同同时,结果为时,结果为0。参与运算数仍以补码出现参与运算数仍以补码出现 00=001=110=111=0例如:例如:9 95 5可写算式如
6、下:可写算式如下: 00001001() 00000101 00001100(9(9的二进制补码的二进制补码) )(5(5的二进制补码的二进制补码) )(12(12的二进制补码的二进制补码) )可见可见9 95=125=12。10 使特定位翻转使特定位翻转 01111010() 00001111 01110101 与与0相相,保留原值,保留原值 00001001() 00000000 0000100111 交换两个值,不用临时变量交换两个值,不用临时变量例如:例如:a=3, b=4,交换,交换a和和b 00000011() 00000100 00000111() 00000100 000000
7、11() 00000111 00000100a=3b=4a=ab=7b=ab=3a=ba=4b=4a=7a=abb=ba= bab=abb=a0=aa=ab=abbab=ba=abb=baa=ab12 求反运算符求反运算符为单目运算符,具有右结合为单目运算符,具有右结合性。其功能是对参与运算的数的各二进位性。其功能是对参与运算的数的各二进位按位求反。运算级别较高(按位求反。运算级别较高(2 2级)级)例如:例如: 9 9的运算如下:的运算如下: () 00001001 1111011013若一个整数若一个整数a为为16位,想使最低一位为位,想使最低一位为0,可以用,可以用a=a&017
8、7776如果将如果将c源程序移植到以源程序移植到以32位存放一个整数的计算位存放一个整数的计算机上,应改用机上,应改用a=a&037777777776如上,移植性差,可改为:如上,移植性差,可改为:a=a&114 左移运算符左移运算符“”是双目运算符。其功能把是双目运算符。其功能把“ ”左边的运算数的各二进位全部左移左边的运算数的各二进位全部左移若干位,由若干位,由“”右边的数指定移动的位数,右边的数指定移动的位数,高位丢弃,低位补高位丢弃,低位补0 0。a的值的值二进制形式二进制形式a1a”是双目运算符。其功能是是双目运算符。其功能是把把“ ”左边的运算数的各二进位全部右左边
9、的运算数的各二进位全部右移若干位,移若干位,“”右边的数指定移动的位数。右边的数指定移动的位数。 例如:设例如:设 a=15,有式子,有式子a2表示把表示把00001111右移为右移为00000011(十进制十进制3)注意注意:对于有符号数,在右移时,符号位将随同移动。:对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补当为正数时,最高位补0;而为负数时,符号位为;而为负数时,符号位为1,最高位是补最高位是补0或是补或是补1 取决于编译系统的规定。移入取决于编译系统的规定。移入0的称为的称为“逻辑右移逻辑右移”,即简单右移,移入,即简单右移,移入1的称为的称为“算术右移算术右移”,
10、很多系统规定为补,很多系统规定为补1。17位运算符和赋值运算符可以组成复合赋值运算符位运算符和赋值运算符可以组成复合赋值运算符&=、|=、=、和左移和左移=、4a=20c=(04)c=150 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1b=a&c0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 021c=(04)c=150 0 0 0 0 0 0 0 0 0 0 0 1 1 1 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 01 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1001 1 1 1 1 1 1 1 1 1 1 1
11、0 0 0 0(04)0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 104; c=(030 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0b=a13d=b|c0 1 1 1 1 0 1 1 1 1 1 1 0 1 0 125main()unsigned a, b, c, d; int n; scanf(“a=%o,n=%d”, &a, &n); b=an; d=c|b; printf(“%on%o”, a, d);运行情况运行情况:a=157653,n=3157653157653757657576526 前面介绍的对内存中信息的存取都以字节为单位。前面
12、介绍的对内存中信息的存取都以字节为单位。实际上有些信息的存取不必用一个或多个字节,实际上有些信息的存取不必用一个或多个字节,例如,例如,“真真”和和“假假”用用0 0或或1 1表示,只需表示,只需1 1位即可。位即可。当计算机用于当计算机用于过程控制过程控制、参数检测参数检测或或数据通讯数据通讯领领域时,控制信息往往只占一个字节的一个或几个域时,控制信息往往只占一个字节的一个或几个二进制位,常常在一个字节中存放几个信息。二进制位,常常在一个字节中存放几个信息。 向一个字节中的一个或几个二进位赋值有如下两向一个字节中的一个或几个二进位赋值有如下两种方法种方法27dataabcd28现设现设c的原
13、值为的原值为0,想将,想将c的值变为的值变为120 0 0 0dataabcd0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0120 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0124data|1241 1 0 0124data|124.29如果如果c的原值不为的原值不为0,想将,想将c的值变为的值变为12data=data&(0177417)8abcd对对c清零清零data1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1(0177417)80 0 0 0dataabcd30 (0177417)8称为称为“屏蔽字屏蔽字”,即把,即把c以以外的信
14、息屏蔽起来不受影响,只使外的信息屏蔽起来不受影响,只使c变为变为0,但但(0177417)8很难记,为此改为如下很难记,为此改为如下data=data& (154)data=data&(0177417)8 相当于:相当于:0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 10 0 0 0 0 0 0 0 1 1 1 1 0 0 0 01 1 1 1 1 1 1 1 0 0 0 0 1 1 1 115154(154)31data=data& (154) |124将将12赋给赋给c0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1150 0 0 0 0
15、 0 0 0 1 0 1 0 1 0 1 0n 首先取首先取n右端右端4位的值位的值n&15如果想将如果想将n右端右端4位的值赋予位的值赋予c0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0n&150 0 0 0data &(154)abcd32data=data&(154)|(n&15)4 与与c中已清零的中已清零的data按位或按位或 左移左移4位位(n&15)40 0 0 0 0 0 0 0 1 0 1 0 0 0 0 00 0 0 0data &(15a=0; pbit-b&=3; pbit-c|=1; pr
16、intf(%d,%d,%dn,pbit-a,pbit-b,pbit-c);37main()struct bs unsigned a:1; unsigned b:3; unsigned c:4; bit,*pbit; bit.a=1; bit.b=7; bit.c=15; printf(%d,%d,%dn,bit.a,bit.b,bit.c); pbit=&bit; pbit-a=0; pbit-b&=3; pbit-c|=1; printf(%d,%d,%dn,pbit-a,pbit-b,pbit-c);382)2)一个位段必须存储在同一个字节中,不能跨两个字节。一个位段必须存
17、储在同一个字节中,不能跨两个字节。如一个字节所剩空间不够存放另一位段时,应从下一如一个字节所剩空间不够存放另一位段时,应从下一单元起存放该位段。也可以有意使某位段从下一单元单元起存放该位段。也可以有意使某位段从下一单元开始。例如:开始。例如:struct bs unsigned a:4 unsigned :0 /*空域空域*/ unsigned b:4 /*从下一单元开始存放从下一单元开始存放*/ unsigned c:4 1)1)位段成员的类型必须指定为位段成员的类型必须指定为unsignedunsigned或或intint类型类型393)3)由于位由于位段段不允许跨两个字节,因此位不允许跨
18、两个字节,因此位段段的的长度不能大于一个字节的长度,也就是说长度不能大于一个字节的长度,也就是说不能超过不能超过8 8位二进位。不能定义位段数组。位二进位。不能定义位段数组。4)4)位位段段可以无位可以无位段段名,这时它只用来作填充名,这时它只用来作填充或调整位置。无名的位或调整位置。无名的位段段是不能使用的。是不能使用的。例如:例如:struct k int a:1 int :2 /*该该2位不能使用位不能使用*/ int b:3 int c:2 ;405)5)位位段段可以用整型格式输出,也可用可以用整型格式输出,也可用%u%u、%o%o、%x%x等各式输出等各式输出6)6)位位段段可以在数值表达式中引用,它会被系可以在数值表达式中引用,它会被系统自动地转换成整型数。如下是对的统自动地转换成整型数。如下是对的printf(“%d,%d,%d”, data.a, data.b, data.c);data.a+5/data.b411. 位运算是语言
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年药品管理法试题
- 绿色信贷对长江经济带碳排放的影响研究
- 轧钢企业经营管理方案
- 滨海文旅小镇一期工程可研及市政专项规划项目招标文件
- 2025至2030年中国生产制造系统行业投资前景及策略咨询报告
- 2025至2030年中国独节竿行业投资前景及策略咨询报告
- 2025至2030年中国点式玻璃幕墙爪行业投资前景及策略咨询报告
- 2025至2030年中国渐近滤光片行业投资前景及策略咨询报告
- 2025至2030年中国涂布干式复合机行业投资前景及策略咨询报告
- 2025至2030年中国汽车用活塞行业投资前景及策略咨询报告
- 2025春季学期国家开放大学本科《工程数学》一平台在线形考(形成性考核作业1至5)试题及答案
- 9.2 严格执法 教案 2024-2025学年高中政治《政治与法治》(统编版必修3)
- 精麻药品培训课件
- 中国粮食面试题库及答案
- 食品生产初级考试试题及答案
- 2025年全国中学生数学奥林匹克竞赛(预赛)模拟卷(全国高中数学联赛一试)(含解析)
- 统编版(2024)七年级下册历史期末复习全册知识点提纲详细版
- 综合新闻类报纸出版服务行业跨境出海战略研究报告
- 学校特色课程设计交流汇报
- 新时代六尺巷工作法时政复习-2025届高考政治二轮复习统编版
- 2025年辽宁省本溪市中考一模英语试题(含答案)
评论
0/150
提交评论