C语言程序设计第11章-位运算课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《C语言程序设计第11章-位运算课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 11 运算 课件
- 资源描述:
-
1、 第十一章 位 运 算 11.1 数字系统、位和字节 11.2 位运算符与位运算 11.3 位运算应用程序举例 11.4 位 段2022-7-18211.1 数字系统、位和字节 11.1.1 数字系统 数制也称计数制,是用一组固定的符号和统一的规则来表示数值的方法。按进位的方法进行计数,称为进位计数制。如在日常生活中使用的十进制,在计算机中采用的二进制,以及八进制、十六进制等都是进位计数制。一种进位计数制包含一组数码符号和两个基本要素:基数和位权。2022-7-183 1数码 数码是指数制中表示基本数值大小的不同符号。例如 十进制有10个数码:0、1、2、3、4、5、6、7、8、9。二进制有2
2、个数码:0、1。八进制有8个数码:0、1、2、3、4、5、6、7。十六进制有16个数码:09和A、B、C、D、E、F。2022-7-184 2基数 基数是指数制所使用数码的个数。例如,二进制的基数为2;十进制的基数为10。在运算中,当某一位上达到或超过基数大小时,就会向前进一。如十进制满十进一,二进制满二进一,十六进制则满十六进一。2022-7-185 3位权 位权是指数制中每一固定位置对应的单位值。一个数据在某个位置上的值等于该数字与这个位置上的因子的乘积,而该因子的值是由所在位置相对于小数点的距离来确定的,这个因子就是位权,即各进位制中位权的值是基数的若干次幂。例如:十进制的123:1的位
3、权是102=100,2的位权是101=10,3的位权是100=1;二进制中的 1101,第一个1的位权是23=8,第二个1的位权是22=4,0的位权是21=2,第三个1的位权是20=1。2022-7-186 任意的R进制数N按位权展开形式如下:其中:ri为计数制中任一个数码,R为基数。为了区分不同数制的数据,可以用括号加基数下标表示数据所属的数制。如:十进制数309.84的位权展开式为:(309.84)10=3102+0101+9100+810-1+410-2 二进制数11011.01 的位权展开式为:(11011.01)2=124+123+121+120+12-22022-7-187mmnn
4、nnnmiiiRrRrRrRrRrRrRr.N1100112211111.1.2 位和字节 在计算机中,表示信息的单位有位、字节、兆、吉等,它们是表示信息量大小的基本概念。1位(bit)位,音译为“比特”,是计算机内构成信息的最小数据单位,即一个1或0。一般用小写字母“b”表示。一位二进制可表示21=2个信息,如:是或否,有或无,真与假等。2022-7-188 2字节(Byte)字节是计算机数据存储和处理信息的基本数据单位。简记为“B”规定1个字节为8位,即8个二进制位是一个字节。1B=8b。2022-7-189 存储器的存储容量除了以位、字节为单位来度量外,还需要一些更大的单位,有KB、MB
5、、GB、TB等度量单位:1KB=210B=1024B (K代表“千”)1MB=220B=210210B=10241024B (M代表“兆”)1GB=230B=210210210B=102410241024B (G代表“吉”)1TB=240B=210210210210B=1024102410241024B (T代表“太”)2022-7-181011.2 位运算符与位运算 C语言的位运算可以分为位逻辑运算与位移位运算,共计6种基本位运算符:注:(1)位运算符中,除是单目运算符外,其余均为双目运算符;(2)运算量只能是整型或字符型的数据,不能为实型数据2022-7-1811运算符运算符含义含义运算符
6、运算符含义含义&按位与按位与|按位或按位或按位异或按位异或按位取反按位取反右移右移11.2.1 位逻辑运算符与运算 1“按位与”运算(&)“按位与”是指参加运算的两个数据,按对应的二进制位分别进行“逻辑与”运算。如果两个相应的二进制位都为1,则该位的运行结果为1(真);否则为0(假)。0&0=0;0&1=0;1&0=0;1&1=12022-7-1812 例如:13&10=?00001101 (=13)(&)00001010 (=10)00001000 (=8)2022-7-1813“按位与”运算有一些特殊的用途:2022-7-1814(1 1)清零:清零:若想将某个二进制数的指定位清零,可将待
7、清零位与若想将某个二进制数的指定位清零,可将待清零位与0 0进行进行“按位与按位与”运算,其余位与运算,其余位与1 1进行进行“按位与按位与”运算;运算;若想将该数各位都清零,可使其与零进行若想将该数各位都清零,可使其与零进行“按位与按位与”运算。运算。【例例11-611-6】将字符变量将字符变量chch所占的字节单元清零。所占的字节单元清零。【例11-611-6】将字符变量chch所占的字节单元清零。程序如下:#includeint main()char ch=67;printf(ch=%d n,ch);ch=ch&0;printf(ch&0后ch=%d n,ch);return 0;202
8、2-7-1815程序运行结果为:ch=67ch&0后ch=0(2)保留指定位:若想保留某个二进制数中的指定位。可将指定位与1进行“按位与”运算,其余位与0进行“按位与”运算即可实现。例如对一个十六位二进制整数a,若想要将其高八位清0,而保留其低八位。则进行:a&00000000 11111111 运算即可:00000001 00110100 (a=308)(&)00000000 11111111 (=255)00000000 00110100 (=52)2022-7-18162“按位或”运算(|)按位或”是指参加运算的两个数据,按对应的二进制位分别进行“逻辑或”运算。如果两个相应的二进制位都为
9、0,则该位的运算结果为0(假);否则为1(真)。即:0|0=0;0|1=1;1|0=1;1|1=1 例如13|10的运算为:2022-7-1817 00001101 (=13)(|)00001010 (=10)00001111 (=15)“按位或”运算的一大用途是经常用来对一个数据的某些位置1。【例11-7】将一个8位的二进制整数的低4位置1,高4位不变。2022-7-1818程序如下:程序如下:#includeint main()char x=67;printf(“x初值为%dn”,x);x=x|15;printf(“x|15运算后的值为%dn”,x);return 0;程序运行结果为:程序
10、运行结果为:x初值为初值为67x|15运算后的值为运算后的值为793“按位异或”运算()“按位异或”是指参加运算的两个数据,按对应的二进制位分别进行“逻辑异或”运算。如果两个相应的二进制位为“异”(值不同),则该位的运算结果为1(真);否则运算结果为0(假)。即 00=0;01=1;10=1;11=0 例如:1310的运算为:2022-7-1819 00001101 (=13)()00001010 (=10)00000111 (=7)“按位异或”运算有以下用途:(1)保留原值:与0进行“按位异或”运算,可保留原值。即:a0=a。例如:130的运算为:00001101 (=13)()000000
11、00 结果为:00001101 2022-7-1820(2)使特定位翻转:与1进行“按位异或”运算,可使操作数特定位进行翻转,即由0变1或者由1变0。2022-7-1821程序如下:#includeint main()char x=l;printf(“l=%dn”,x);x=x15;printf(x15=%dn,x);return 0;【例例11-811-8】设字符设字符x=lx=l,将其二,将其二进制数的高进制数的高4 4位保位保留原样,低留原样,低4 4位各位各位翻转。位翻转。01101100 (=108)()0000 1111 (=15)0110 0011 (=99)程序运行结果为:l=
12、108x15=99(3)置零:每一个数与它自身进行“异或”运算,结果各位均为零。即:xx=0。2022-7-18224“按位取反”运算()按位取反”运算符“”是唯一的一个单目位运算符,用来将一个二进制数的每一位取反,即将1(真)变0(假),将0(假)变1(真)。即0=1;1=0按位取反”运算常用来生成与系统实现无关的常数,以增加程序的可移植性。如要将变量如要将变量x=103=x=103=(11001111100111)2 2最低最低6 6位置成位置成0 0,其余位不变。,其余位不变。用用“按位与按位与”运算实现,就需要考虑运算实现,就需要考虑x x在系统内存放的位数:在系统内存放的位数:如果如
13、果x x占占2 2个字节,则需要执行:个字节,则需要执行:x=x&0 xffc0 x=x&0 xffc0 如果如果x x占占4 4个字节,则需要执行:个字节,则需要执行:x=x&0 xffffffc0 x=x&0 xffffffc0 但若果把表达式变为:但若果把表达式变为:x x=x x&0 x3f0 x3f 整数整数x x占占2 2个字节还是占个字节还是占4 4个字节都能实现要求,大大增强了程序个字节都能实现要求,大大增强了程序的可移植性。的可移植性。2022-7-182311.2.2 位移位运算符与运算 1“左移”运算()左移运算符“”是双目运算符,左移运算的一般形式为:运算对象左移位数。
14、左移的作用是将一个数的各二进制位依次左移若干位(由左移位数给出),左移时,右端(低位)补0,左端(高位)移出的部分舍去。2022-7-1824 例如,假设以一个字节存一个整数,则无符号整型变量a=15,在执行a=a2后,a的值变为60。左移变化过程如下图:可见,左移1位相当于操作数乘以2,左移2位相当于操作数乘以4,左移n位相当于操作数乘以2n,此外,左移运算要比乘法快的多。但此结论只适用于该数左移时被溢出舍弃的高位中不包含1的情况。2022-7-18250000 11110000 11110001 11100001 11100011 11000011 1100左移一次左移一次左移一次左移一次
15、 例如:若变量a=65,即二进制数(01000001)2时,左移一位时溢出的是0,变为(10000010)2,即130。而左移2位时,溢出的高位中包含1,a的值变为(00000100)2,即4,则不符合上述结论。【例11-9】输入两个数字符a和b,由a、b组合生成整数c(c用字符类型表示),并显示出来。生成规则是:a的低4位作为c的高4位,b的低4位作为c的低4位。2022-7-1826#include int main()char a,b,c;while(1)printf(Please input a and b:n);scanf(%c,%c,&a,&b);if(a=0)&(b=0)brea
16、k;a=a)右移运算符“”是双目运算符,右移运算的一般形式为:运算对象右移位数 右移的作用是将一个数的各二进制位依次右移若干位(由右移位数给出),右移时,右端(低位)移出的部分舍去,左端(高位)移入的二进制数分两种情况:对于无符号数和正整数,高位补0;对于负整数,有的系统高位补1,有的系统高位补0。补0的称为“逻辑右移”,即简单右移;补1的称为“算术右移”。具体情况需要查阅相应C编译程序用户手册。2022-7-1828 例如,占一个字节的无符号整型变量a=15,则a=a2后,a的值变为3(向下取整)。变化过程如图11-2所示。可见,右移1位相当于操作数除以2,右移2位相当于除以4,右移n位相当
展开阅读全文