




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、会计学1第第 位运算位运算(yn sun)第一页,共46页。【例例8.1】从结果可以看出,在这个程序中出现的几种运算符显然不同于以前,它们不是两个十进制数值之间简单的运算,而是十进制数对应的二进制“位”的运算。第1页/共45页第二页,共46页。【例8.1】编写程序完成对两个整型量进行按位逻辑运算。程序名为l8_1.cpp。#include stdio.hmain() int a,b;printf(input the numbers: );scanf(%d,%d,&a,&b);printf(%dn,a&b); /*输出按位与结果*/printf(%dn,a|b); /*输出按位或结果*/prin
2、tf(%dn,ab); /*输出按位异或结果*/printf(%un,a); /*输出 a的按位取反结果*/运行情况为:input the numbers: 输入:9,5 1131265526第2页/共45页第三页,共46页。输入源程序弹出运行结果窗口第3页/共45页第四页,共46页。8.2.1 二进制位运算二进制位运算8.2.2 位复合赋值运算符位复合赋值运算符所谓位运算是指进行二进制位的运算。在系统软件中,常要处理二进制位的问题。C语言提供了按位运算的功能,这使得它与其它高级语言相比,具有很强的优越性。第4页/共45页第五页,共46页。类 型运算符含义位逻辑运算符&按位与|按位或按位异或取
3、反移位运算 符右移语言(yyn)提供了六种位运算符(见表8-1):表8-1位逻辑运算与移位运算第5页/共45页第六页,共46页。说明:运算量只能是整型或字符型的数据,不能为实型或结构体等类型的数据。六个位运算符的优先级由高到低依次为:取反、左移和右移、按位与、按位异或、按位或。两个不同长度的数据进行位运算时,系统会将二者按右端对齐。下面对各种位运算符介绍(jisho)如下:1“按位与按位与”运算符(运算符(&)2“按位或按位或”运算符(运算符(|)3“按位异或按位异或”运算符运算符()4“求反求反”运算符运算符 ()5“左移左移”运算符运算符()第6页/共45页第七页,共46页。(1)规则(g
4、uz):参与运算的两数(以补码方式出现)各对应的二进位相与(即逻辑乘),只有对应的两个二进位均为1时,结果位才为1,否则为0,它是双目运算符。即:0&0=0;0&1=0;1&0=0;1&1=1。例如:9&5可写算式如下:9的二进制补码: 0 0 0 0 1 0 0 15的二进制补码: 0 0 0 0 0 1 0 1& _ 0 0 0 0 0 0 0 1(1的二进制补码)可见9&5=1。第7页/共45页第八页,共46页。(2)特殊(tsh)用途:清零按位与运算通常用来对某些位清0。由按位与的规则可知:为了使某数的指定位清零,可将该数按位与一特定数。该数中为1的位,特定数中相应位应为0;该数中为0
5、的位,特定数中相应位可以为0也可以为1。由此可见,能对某一个数的指定位清零的数并不唯一。 【例8.2】取一个数中某些位可将该数与一个特定数进行&运算,对于要取的那些位,特定数中相应的位设为1。【例8.3】取出数中某一位要相将一个数的某一位保留下来,可将该数与一个特定数进行&运算,特定数的相对应的那位应为1。【例8.4】第8页/共45页第九页,共46页。【例8.2】对原数00110110中为1的位清零。原数补码: 0 0 1 1 0 1 1 0清零的数: 1 1 0 0 0 0 0 0 (或01000000、00000000等)& _ 0 0 0 0 0 0 0 0 程序可写为:#include
6、 stdio.hmain() int a=0 x36,b=0 xc0,c;c=a&b;printf(a=%xnb=%xnc=%xn,a,b,c);运行情况为:a=36b=c0c=0 第9页/共45页第十页,共46页。输入源程序弹出运行结果窗口第10页/共45页第十一页,共46页。【例8.3】把a的高八位清0,保留低八位。可作a&255运算(255的二进制数为0000000011111111)。#include stdio.hmain() int a,b=255,c;scanf(%d,&a);c=a&b;printf(a=%xnb=%xnc=%xn,a,b,c); 运行情况为:输入:920a=3
7、98b=ffc=98 第11页/共45页第十二页,共46页。输入源程序弹出运行结果窗口第12页/共45页第十三页,共46页。【例8.4】编写程序将a(=9)的最低位取出。程序名为l8_4cpp。#include stdio.hmain() int a=9,b=1,c;c=a&b;printf(a=%xnb=%xnc=%xn,a,b,c);运行情况为:a=9b=1c=1第13页/共45页第十四页,共46页。输入源程序弹出运行结果窗口第14页/共45页第十五页,共46页。(1)规则参与运算的两数(以补码出现)各对应的二进位相或(即逻辑加)。只要对应的两个二进位有一个为1时,结果位就为1,它是双目运
8、算符。即:0|0=0;0|1=1;1|0=1;1|1=1。例如:9|5可写算式如下:0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 1 | _ 0 0 0 0 1 1 0 1 (十进制为13)可见(kjin)9|5=13。(2)特殊用途将一个数据的某些指定的位置为1。将该数按位或一个特定的数,该特定的数的相应位置为1。【例8.5】第15页/共45页第十六页,共46页。【例8.5】将一个数的低5位置为1。程序名为l8_5.cpp。只需将该数与“00011111”进行&运算。如: # # # # # # # # (#可代表0或1) 0 0 0 1 1 1 1 1| _ # # # 1
9、1 1 1 1 #include stdio.hmain() int a,b=31,c;scanf(%d,&a);c=a|b; printf(a=%xnb=%xnc=%xn,a,b,c);运行情况为:输入:5a=5b=1fc=1f第16页/共45页第十七页,共46页。输入源程序弹出运行结果窗口第17页/共45页第十八页,共46页。(1)规则参与运算的两数(以补码出现)各对应的二进位相异或,当两对应的二进位相异时,结果为1,它是双目运算符。即:00=0;01=1;10=1;11=0。例如:95可写成算式如下:0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 1 _ 0 0 0 0 1
10、1 0 0 (十进制为12) 可见95=12。(2)特殊用途使特定位翻转 【例8.6】要使哪几位翻转就将与其进行“按位异或”运算的数的相应位置为1。使特定位保留原值要使哪几位保留原值就将与其进行“按位异或”运算的数的相应位置为0。交换两个值,不用临时(ln sh)变量 【例8.7】第18页/共45页第十九页,共46页。【例8.6】将01110001的低4 位翻转,高4位保留原值。 0 1 1 1 0 0 0 1 0 0 0 0 1 1 1 1 _ 0 1 1 1 1 1 1 0 (十进制126)程序可写为:#include stdio.hmain() int a=0 x71,b=0 xf,c;
11、c=ab;printf(a=%xnb=%xnc=%xn,a,b,c);运行情况为:a=71b=fc=7e第19页/共45页第二十页,共46页。输入源程序弹出运行结果窗口第20页/共45页第二十一页,共46页。 【例8.7】设有整型数 a=5,b=7。编写程序利用位运算(yn sun),将a和b的值互换。 程序中,通过顺序使用a=ab;b=ba;a=ab;三个赋值语句将两变量a、b的值互换。具体计算过程如下:第一步: a 0000000000000101 b 0000000000000111 a=ab 0000000000000010第二步: a 0000000000000010 b 00000
12、00000000111 b=ba 0000000000000101 (b的值为5)第三步: a 0000000000000010 b 0000000000000101 a=ab 0000000000000111 (a的值为7)第21页/共45页第二十二页,共46页。程序(chngx)名为l8_7.cpp。#include stdio.hmain() int a=5,b=7;printf(a=%d,b=%dn,a,b);a=ab;b=ba;a=ab;printf(a=%d,b=%dn,a,b);运行情况为:a=5,b=7a=7,b=5第22页/共45页第二十三页,共46页。输入源程序弹出运行结果
13、窗口第23页/共45页第二十四页,共46页。(1)规则对参与运算的数的各二进位按位求反,它是单目运算符,具有右结合性。即:0=1;1=0。例如:9的运算为0000000000001001 _1111111111110110 (2)用途适当的使用(shyng)可增加程序的移植性。如要将整数a的最低位置为0,我们通常采用语句a=a&1;来完成,因为这样对a是16位数还是32位数均不受影响。第24页/共45页第二十五页,共46页。(1)规则把“”左边的运算数的各二进位全部左移若干位,由“”右边的数指定移动的位数,高位丢弃(diq),低位补0,它是双目运算符。例如:a”左边的运算数的各二进位全部右移若
14、干位,“”右边的数指定移动的位数。(2)特殊用途(yngt)右移1位相当于该数除以2;右移n位相当于该数除以2n。(3)说明对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0;而为负数时,符号位为1,最高位是补0还是补1取决于计算机系统的规定。移入0的称为“逻辑右移”;移入1的称为“算术右移”。我们可以通过编写程序来验正所使用的系统是采用“逻辑右移”还是“算术右移”。很多系统规定为补1,即“算术右移”。 如: a: 1001011111101101a1: 0100101111110110 ( 逻辑右移)a1: 1100101111110110 ( 算术右移)第26页/共45页第二
15、十七页,共46页。位运算符与赋值运算符结合组成位复合赋值运算符。位复合赋值运算符与算术复合赋值运算符相似,它们的运算级别较低,仅高于逗号运算符,是自右而左的结合性。1分类位复合赋值运算符如表8-2所示:2运算过程(1)先对两个操作数进行位操作。(2)再将结果赋予第一个操作数(因此第一个操作数必须是变量)。如:a&=2;表示a=a&2;。第27页/共45页第二十八页,共46页。运算符运算符名称名称例子例子等价于等价于&=位与赋值a&=ba=a&b|=位或赋值a|=ba=a|b=位异或赋值a=ba=ab=右移赋值a=ba=ab=左移赋值a=ba=ab第28页/共45页第二十九页,共46页。1位段的
16、定义与位段中数据位段的定义与位段中数据(shj)是是引用引用2对于位段使用的几点说明对于位段使用的几点说明3应用举例应用举例【例例8.8】为了节省存储空间,并使处理简便,语言提供了又一种使用结构的方法位段(也称位域)。所谓位段就是以位为单位定义长度的结构体类型中的成员。每个位段都有一个位段名,允许在程序中引用位段中的数据进行操作。 这样就可以将若干个信息紧缩存放,仅用一个或几个字节来表示。第29页/共45页第三十页,共46页。(1)位段的定义)位段的定义(2)位段中数据的引用)位段中数据的引用第30页/共45页第三十一页,共46页。位段的定义就是将它定义为结构体中的成员,其形式为:struct
17、 ;struct ;或 struct ;或 struct ;在这三种形式中,位段表列的形式均为: :;第31页/共45页第三十二页,共46页。例如:struct bs unsigned a:8; unsigned b:2; unsigned c:6; data;表示data为struct bs型结构变量(binling)(也称位段变量(binling)),共占两个字节。其中位段a占8位,位段b占2位,位段c占6位,如图8-1所示。 8 2 6 (位)图8-1data位段变量内存示意图abc第32页/共45页第三十三页,共46页。位段在本质上就是一种结构体类型中的成员,只不过是按二进制位分配的。
18、因此,位段中数据的引用可按结构变量成员的访问方法进行(jnxng),形式为:.如:data.a=2;表示给位段变量data的位段a赋值为2。第33页/共45页第三十四页,共46页。(1)一个位段必须存储在同一个存储单元中,不能跨跃两个(lin )单元。如一个单元所剩空间不够存放下一位段时,应从下一单元起存放该位段。(2)可以有意使某位段从下一单元开始存放。(3)位段中的数据不能超过其允许的最大值范围,位段的长度不能大于机器字长。例如,定义位段的长度为2位,则其中存放的最大数为3。(4)位段可以无名位段,无名位段是不能使用的,它只用来作填充或调整位置。(5)不能定义位段数组,也不能定义返回值为位
19、段的函数。(6)位段允许在数据表达式中引用,它会被系统自动地转换为整型数。第34页/共45页第三十五页,共46页。【例8.8】位段变量和指向(zh xin)位段的指针变量的使用。程序名为l8_8.cpp。#include stdio.hmain() 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; /*把位段变量bit的
20、地址送给指针变量pbit*/pbit-a=0; /*用指针方式给位段a重新赋值,赋为0*/第35页/共45页第三十六页,共46页。pbit-b&=3;pbit-c|=1;printf(%d,%d,%dn,pbit-a,pbit-b,pbit-c); /*用指针方式输出(shch)了这三个位段的值*/运行结果为:1,7,150,3,15第36页/共45页第三十七页,共46页。输入源程序弹出运行结果窗口第37页/共45页第三十八页,共46页。例例8.9例例8.10第38页/共45页第三十九页,共46页。【例8.9】取 一个数 a从右端开始的第5至8位。程序名为l8_9.cpp。分析:(1)先使a右移5位,见图8-4,目的(md)是使要取出的那几位移到最右端。(2)设置一个低4位(即8-5+1)全为1,其余的位全为0的数,即将一个全1的数左移4位,这样右端低4位为0。(3)将上面两
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 古代诗人情感世界探析
- 孩子喜爱运动的营养支持方案
- 高效教学下的实验设备保养技术探索与实践应用
- 2025年中国快接式管牙接口市场调查研究报告
- 2025年中国微量法石油产品残炭测定器市场调查研究报告
- 2025年中国微孔薄膜覆合过滤材料市场调查研究报告
- 2025年中国室内装饰灯市场调查研究报告
- 2025年中国天然花岗石建筑板材市场调查研究报告001
- 学校心理健康教育中的心理游戏疗法应用
- 如何帮助孩子树立正确的人生观
- 工厂厂长年终总结汇报
- 《公路桥梁挂篮设计与施工技术指南》
- (一模)宁波市2024学年第一学期高考模拟考试 物理试卷(含答案)
- 人教版高中物理选择性必修第三册第五章原子核第2节放射性元素的衰变课件
- 人教版小学六年级下册音乐教案全册
- 12J201平屋面建筑构造图集(完整版)
- 20起典型火灾事故案例合集-2024年消防月专题培训
- 湘教版区域地理 课件 第八讲《南亚-印度》第二课时
- 拼多多在线测评98道题
- 人教版(2024)六年级全一册 第18课 土壤湿度控制好
- 中国国新基金管理有限公司招聘笔试题库2024
评论
0/150
提交评论