第5章_位运算(C语言程序设计)解读课件

PPT
  • 阅读 54 次
  • 下载 0 次
  • 页数 36 页
  • 大小 884.001 KB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档25.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
第5章_位运算(C语言程序设计)解读课件
可在后台配置第一页与第二页中间广告代码
第5章_位运算(C语言程序设计)解读课件
可在后台配置第二页与第三页中间广告代码
第5章_位运算(C语言程序设计)解读课件
可在后台配置第三页与第四页中间广告代码
第5章_位运算(C语言程序设计)解读课件
第5章_位运算(C语言程序设计)解读课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 36
  • 收藏
  • 违规举报
  • © 版权认领
下载文档25.00 元 加入VIP免费下载
文本内容

【文档说明】第5章_位运算(C语言程序设计)解读课件.ppt,共(36)页,884.001 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-44647.html

以下为本文档部分文字说明:

本章导读本章是初学C语言者的一大难点,属较高要求,适合于编写系统软件的需要。读者应在掌握了计算机的几种基本数值编码的基础上,开始本章的学习。通过本章的学习我们将近一步体会到C语言既具有高级语言的特点,又具有低级语言的功能,它能直接对计算机的硬件进行操作,因而它具有广泛的用途

和很强的生命力。《C语言程序设计》(VisualC++6.0环境)返回本书目录返回本书目录第5章位运算本章主要知识点(1)位运算符的含义及使用(2)位运算的特殊应用(3)位复合赋值运算符的含义及使用第5章位运算《C语言程序设计》(VisualC++6.0环境)返回本章导读返回本章导读5.1位运算

的C程序实例5.1位运算的C程序实例5.2二进制位运算5.2二进制位运算5.3综合实训5.3综合实训《C语言程序设计》(VisualC++6.0环境)返回本节目录返回本节目录程序演示程序演示【例5.1】编写程序完

成对两个整型量进行按位逻辑运算。程序名为5_1.cpp。#include"stdio.h"main(){inta,b;printf("inputthenumbers:");scanf("%d,%d",&a,&b);printf("%d\n",a&b);/*输出按位与结果*/printf("%

d\n",a|b);/*输出按位或结果*/printf("%d\n",a^b);/*输出按位异或结果*/printf("%u\n",~a);/*输出a的按位取反结果*/}运行情况为:inputthenumbers:输入:9,5<CR>1131242949672865

.1位运算的C程序实例[例5.1]程序演示输入源程序弹出运行结果窗口返回例题返回例题返回本节目录返回本节目录《C语言程序设计》(VisualC++6.0环境)返回本章目录返回本章目录5.2二进制位运算5.2.1二进制位运算5.2.1二进制位运算5.2.2位复合赋值运算符5.2.2位复合赋值运算符所

谓位运算是指进行二进制位的运算。在系统软件中,常要处理二进制位的问题。C语言提供了按位运算的功能,这使得它与其它高级语言相比,具有很强的优越性。《C语言程序设计》(VisualC++6.0环境)5.2.1二进制位运算类型运算符含义位逻辑运算符&按位与|按位或^按位异或~取反移位

运算符<<左移>>右移C语言提供了六种位运算符(见表5-1):表5-1位逻辑运算与移位运算返回本节目录返回本节目录《C语言程序设计》(VisualC++6.0环境)5.2.1二进制位运算说明:①运算量只能是整型或字符型的数据,不能为实型

或结构体等类型的数据。②六个位运算符的优先级由高到低依次为:取反、左移和右移、按位与、按位异或、按位或。③两个不同长度的数据进行位运算时,系统会将二者按右端对齐。下面对各种位运算符介绍如下:返回本节目录返回本节目录1.“按位与”运算符(&)2.“按位或”运算符(|)2.“按位或”运算符(|)3.

“按位异或”运算符(^)3.“按位异或”运算符(^)4.“求反”运算符(~)4.“求反”运算符(~)5.“左移”运算符(<<)5.“左移”运算符(<<)6.“右移”运算符(>>)6.“右移”运算符(>>)《C语言程序设计》(VisualC++6.0环境)1.“按位与

”运算符(&)(1)规则:参与运算的两数(以补码方式出现)各对应的二进位相与(即逻辑乘),只有对应的两个二进位均为1时,结果位才为1,否则为0,它是双目运算符。即:0&0=0;0&1=0;1&0=0;1&1=1。例如:9&5可写算式如下:9的二进制

补码:000010015的二进制补码:00000101&___________________00000001(1的二进制补码)可见9&5=1。返回5.2.1目录返回5.2.1目录《C语言程序设计》(VisualC++6.0环境)1.“按位与”运算符(&)(2)特殊用途:①清零按

位与运算通常用来对某些位清0。由按位与的规则可知:为了使某数的指定位清零,可将该数按位与一特定数。该数中为1的位,特定数中相应位应为0;该数中为0的位,特定数中相应位可以为0也可以为1。由此可见,能对某一个数的指定位清零的数并不唯一。【例5.2】②取一个数中某些位可将该数与一个特定数进行&

运算,对于要取的那些位,特定数中相应的位设为1。【例5.3】③取出数中某一位要相将一个数的某一位保留下来,可将该数与一个特定数进行&运算,特定数的相对应的那位应为1。【例5.4】返回本节目录返回本节目录【例5.2】实例《C语言程序设计》

(VisualC++6.0环境)返回1目录返回1目录程序演示程序演示【例5.2】对原数00110110中为1的位清零。原数补码:00110110清零的数:11000000(或01000000、00000000等)&___________________00000000程序可写为:#inc

lude"stdio.h"main(){inta=0x36,b=0xc0,c;c=a&b;printf("a=%x\nb=%x\nc=%x\n",a,b,c);}运行情况为:a=36b=c0c=0[例5.2]程序演示输入源程序弹出运

行结果窗口返回例题返回例题返回1目录返回1目录【例5.3】实例《C语言程序设计》(VisualC++6.0环境)返回1目录返回1目录程序演示程序演示【例5.3】把a的高八位清0,保留低八位。可作a&255运算(255的二进制数为00000000

11111111)。#include"stdio.h"main(){inta,b=255,c;scanf("%d",&a);c=a&b;printf("a=%x\nb=%x\nc=%x\n",a,b,c);}运行情况为:输入:920<CR>a=3

98b=ffc=98[例5.3]程序演示输入源程序弹出运行结果窗口返回例题返回例题返回1目录返回1目录【例5.4】实例《C语言程序设计》(VisualC++6.0环境)返回1目录返回1目录程序演示程序演示【例5.4】编写程序将a(=9)的最低位取出。程序名为5_4cpp。#include

"stdio.h"main(){inta=9,b=1,c;c=a&b;printf("a=%x\nb=%x\nc=%x\n",a,b,c);}运行情况为:a=9b=1c=1[例5.4]程序演示输入源程序弹出运行结果窗口返回例题返回例题返回1目录返回1目录《

C语言程序设计》(VisualC++6.0环境)2.“按位或”运算符(|)(1)规则参与运算的两数(以补码出现)各对应的二进位相或(即逻辑加)。只要对应的两个二进位有一个为1时,结果位就为1,它是双目运算符。即:0|0=0;0|1=1;1|0=1;1|1=1。例如:9|5可写算式如下:000010

0100000101|_________________00001101(十进制为13)可见9|5=13。(2)特殊用途将一个数据的某些指定的位置为1。将该数按位或一个特定的数,该特定的数的相应位置为1。【

例5.5】返回5.2.1目录返回5.2.1目录【例5.5】实例《C语言程序设计》(VisualC++6.0环境)返回2目录返回2目录【例5.5】将一个数的低5位置为1。程序名为5_5.cpp。只需将该数与“00011111”进行|运算。如:########(#可代表0或1)00011111|

_______________###11111#include"stdio.h"main(){inta,b=31,c;scanf("%d",&a);c=a|b;printf("a=%x\nb=%x\nc=%x\n",a,b,c);}运行情况为:输入:5<CR>a=5b=1fc=1f程序

演示程序演示[例5.5]程序演示输入源程序弹出运行结果窗口返回例题返回例题返回2目录返回2目录《C语言程序设计》(VisualC++6.0环境)3.“按位异或”运算符(^)(1)规则参与运算的两数(以

补码出现)各对应的二进位相异或,当两对应的二进位相异时,结果为1,它是双目运算符。即:0^0=0;0^1=1;1^0=1;1^1=0。例如:9^5可写成算式如下:0000100100000101^_____________00001100(十进制为12)可见9^5=12。(2)

特殊用途①使特定位翻转【例5.6】要使哪几位翻转就将与其进行“按位异或”运算的数的相应位置为1。②使特定位保留原值要使哪几位保留原值就将与其进行“按位异或”运算的数的相应位置为0。③交换两个值,不用临时变量【例5.7】返回5.2.1目录返回5.2

.1目录【例5.6】实例《C语言程序设计》(VisualC++6.0环境)返回3目录返回3目录【例5.6】将01110001的低4位翻转,高4位保留原值。0111000100001111^________

______01111110(十进制126)程序可写为:#include"stdio.h"main(){inta=0x71,b=0xf,c;c=a^b;printf("a=%x\nb=%x\nc=%x\n",a,b,c);}运行情况为:a=71b=fc=7

e程序演示程序演示[例5.6]程序演示输入源程序弹出运行结果窗口返回例题返回例题返回3目录返回3目录【例5.7】实例《C语言程序设计》(VisualC++6.0环境)【例5.7】设有整型数a=5,b=7。编写程序利用位运算

,将a和b的值互换。程序中,通过顺序使用a=a^b;b=b^a;a=a^b;三个赋值语句将两变量a、b的值互换。具体计算过程如下:第一步:a0000000000000101b0000000000000111a=a^b00000

00000000010第二步:a0000000000000010b0000000000000111b=b^a0000000000000101(b的值为5)第三步:a0000000000000010b0000000000000101a=

a^b0000000000000111(a的值为7)返回3目录返回3目录【例5.7】实例《C语言程序设计》(VisualC++6.0环境)程序名为5_7.cpp。#include"stdio.h"main(){inta=5,b=7;printf("a=%d,b=%d\n",a,b);a=

a^b;b=b^a;a=a^b;printf("a=%d,b=%d\n",a,b);}运行情况为:a=5,b=7a=7,b=5程序演示程序演示返回3目录返回3目录[例5.7]程序演示输入源程序弹出运行结果窗口返回例题返

回例题返回3目录返回3目录《C语言程序设计》(VisualC++6.0环境)4.“求反”运算符(~)(1)规则对参与运算的数的各二进位按位求反,它是单目运算符,具有右结合性。即:~0=1;~1=0。例如:~9的运算为0000000000001001~____

______________1111111111110110(2)用途适当的使用可增加程序的移植性。如要将整数a的最低位置为0,我们通常采用语句a=a&~1;来完成,因为这样对a是16位数还是32位数均不受影响。返回5.2.1目录返回5.

2.1目录《C语言程序设计》(VisualC++6.0环境)5.“左移”运算符(<<)(1)规则把“<<”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0,它是双目运算符。例如:a<<4指把a的各二进位向左移动4位。如a=00000011(十进制3),左

移4位后为00110000(十进制410)。(2)特殊用途左移1位相当于该数乘以2;左移n位相当于该数乘以2n。但此结论只适用于该数左移时被溢出舍弃的高位中不包含1的情况。左移比乘法运算快得多,有的C编译系统自

动将乘2运算用左移一位来实现。返回5.2.1目录返回5.2.1目录《C语言程序设计》(VisualC++6.0环境)6.“右移”运算符(>>)(1)规则把“>>”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移

动的位数。(2)特殊用途右移1位相当于该数除以2;右移n位相当于该数除以2n。(3)说明对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0;而为负数时,符号位为1,最高位是补0还是补1取决于

计算机系统的规定。移入0的称为“逻辑右移”;移入1的称为“算术右移”。我们可以通过编写程序来验正所使用的系统是采用“逻辑右移”还是“算术右移”。很多系统规定为补1,即“算术右移”。如:a:10010111111

01101a>>1:0100101111110110(逻辑右移)a>>1:1100101111110110(算术右移)返回5.2.1目录返回5.2.1目录《C语言程序设计》(VisualC++6.0环境)返回本节目录返回本节目录5.2.2位复合赋值运算符位运算符与赋值运算符结合组成位复合赋值

运算符。位复合赋值运算符与算术复合赋值运算符相似,它们的运算级别较低,仅高于逗号运算符,是自右而左的结合性。1.分类位复合赋值运算符如表5-2所示:2.运算过程(1)先对两个操作数进行位操作。(2)再将结果赋予第一个操作数(因此第一个操作数必

须是变量)。如:a&=2;表示a=a&2;。《C语言程序设计》(VisualC++6.0环境)返回5.2.2目录返回5.2.2目录表5-2位复合赋值运算符运算符名称例子等价于&=位与赋值a&=ba=a&b|=位或赋值a|=ba=

a|b^=位异或赋值a^=ba=a^b>>=右移赋值a>>=ba=a>>b<<=左移赋值a<<=ba=a<<b《C语言程序设计》(VisualC++6.0环境)返回本章目录返回本章目录5.4综合实训[例5.9][例5.9][例5.10][例5.10]【例5.

9】实例《C语言程序设计》(VisualC++6.0环境)【例5.9】取一个数a从右端开始的第5至8位。程序名为5_9.cpp。分析:(1)先使a右移5位,见图5-4,目的是使要取出的那几位移到最右端。(2)设置一个低4位全为1,其余的位全为0的数,即将一个全1的数左移4位,这样右端低4位为0

。(3)将上面两数按位与,将低4位保留。返回本节目录返回本节目录1598543015985430当然,对一个数可以任意指定从其右面第m位开始向右取n位,只需将程序中的“a>>5”改成“a>>m”,且将“~(~0<<3)”改成“~(~0<<(m-n+1))”即可。【

例5.9】实例《C语言程序设计》(VisualC++6.0环境)#include"stdio.h"main(){unsigneda,b,c,d;printf("inputanumber:");scanf("%d",&a);b=

a>>5;c=~(~0<<4);d=b&c;printf("a=%x\td=%x\n",a,d);}运行情况如下:inputanumber:输入:421<CR>a=01a5d=d返回本节目录返回本节目录程序演示程序演示[例5.9]程序演示输入源程序弹出运行结果窗口返回例题返回例题返回本节目录

返回本节目录【例5.10】实例《C语言程序设计》(VisualC++6.0环境)【例5.10】对某个整数x进行左循环移位,移n位。程序名为5_10.cpp。分析:设该数用2个字节存放,则原数中右边的16-n位向左移动,原数中左边的n位移至右边,如图5-

5所示。①先把x赋给中间变量a,b。②把a右移16-n位,使原数中左边的n位移至右边,其余各位为0。③再把b左移n位,使原数中右边的16-n位移至最左边,其余各位为0。④上述两数按位相或。返回本节目录返回本节目录n16-n16-nn【例5.10】实例《C语言程

序设计》(VisualC++6.0环境)#include"stdio.h"main(){unsignedx,a,b,c;intn;scanf("%d,%d",&x,&n);a=x>>(16-n);b=x

<<n;c=a|b;printf("x=%x,c=%x",x,c);}运行情况如下:输入:400,3<CR>x=190,c=c80返回本节目录返回本节目录程序演示程序演示[例5.10]程序演示输入源程序弹出运行结果窗口返回例题返回例题返回本节目录返回本节目录

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?