好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

C语言程序设计-第11章--位运算.ppt

52页
  • 卖家[上传人]:夏日****8
  • 文档编号:327433107
  • 上传时间:2022-07-26
  • 文档格式:PPT
  • 文档大小:1.03MB
  • / 52 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 程序设计技术基础-C语言第十一章 位 运 算11.1 数字系统、位和字节11.2 位运算符与位运算11.3 位运算应用程序举例11.4 位 段2022/7/252程序设计技术基础-C语言11.1 数字系统、位和字节11.1.1 数字系统数制也称计数制,是用一组固定的符号和统一的规则来表示数值的方法按进位的方法进行计数,称为进位计数制如在日常生活中使用的十进制,在计算机中采用的二进制,以及八进制、十六进制等都是进位计数制一种进位计数制包含一组数码符号和两个基本要素:基数和位权2022/7/253程序设计技术基础-C语言1数码数码是指数制中表示基本数值大小的不同符号例如十进制有10个数码:0、1、2、3、4、5、6、7、8、9二进制有2个数码:0、1八进制有8个数码:0、1、2、3、4、5、6、7十六进制有16个数码:09和A、B、C、D、E、F2022/7/254程序设计技术基础-C语言2基数基数是指数制所使用数码的个数例如,二进制的基数为2;十进制的基数为10在运算中,当某一位上达到或超过基数大小时,就会向前进一如十进制满十进一,二进制满二进一,十六进制则满十六进一2022/7/255程序设计技术基础-C语言3位权位权是指数制中每一固定位置对应的单位值。

      一个数据在某个位置上的值等于该数字与这个位置上的因子的乘积,而该因子的值是由所在位置相对于小数点的距离来确定的,这个因子就是位权,即各进位制中位权的值是基数的若干次幂例如:十进制的123:1的位权是102=100,2的位权是101=10,3的位权是100=1;二进制中的 1101,第一个1的位权是23=8,第二个1的位权是22=4,0的位权是21=2,第三个1的位权是20=12022/7/256程序设计技术基础-C语言任意的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/257程序设计技术基础-C语言11.1.2 位和字节在计算机中,表示信息的单位有位、字节、兆、吉等,它们是表示信息量大小的基本概念1位(bit)位,音译为“比特”,是计算机内构成信息的最小数据单位,即一个1或0。

      一般用小写字母“b”表示一位二进制可表示21=2个信息,如:是或否,有或无,真与假等2022/7/258程序设计技术基础-C语言2字节(Byte)字节是计算机数据存储和处理信息的基本数据单位简记为“B”规定1个字节为8位,即8个二进制位是一个字节1B=8b2022/7/259程序设计技术基础-C语言存储器的存储容量除了以位、字节为单位来度量外,还需要一些更大的单位,有KB、MB、GB、TB等度量单位:1KB=210B=1024B (K代表“千”)1MB=220B=210210B=10241024B (M代表“兆”)1GB=230B=210210210B=102410241024B (G代表“吉”)1TB=240B=210210210210B=1024102410241024B (T代表“太”)2022/7/2510程序设计技术基础-C语言11.2 位运算符与位运算C语言的位运算可以分为位逻辑运算与位移位运算,共计6种基本位运算符:注:(1)位运算符中,除是单目运算符外,其余均为双目运算符;(2)运算量只能是整型或字符型的数据,不能为实型数据2022/7/2511运算符运算符含义含义运算符运算符含义含义&按位与按位与|按位或按位或按位异或按位异或按位取反按位取反右移右移程序设计技术基础-C语言11.2.1 位逻辑运算符与运算1“按位与”运算(&)“按位与”是指参加运算的两个数据,按对应的二进制位分别进行“逻辑与”运算。

      如果两个相应的二进制位都为1,则该位的运行结果为1(真);否则为0(假)0&0=0;0&1=0;1&0=0;1&1=12022/7/2512程序设计技术基础-C语言例如:13&10=?00001101 (=13)(&)00001010 (=10)00001000 (=8)2022/7/2513程序设计技术基础-C语言“按位与”运算有一些特殊的用途:2022/7/2514(1 1)清零:清零:若想将某个二进制数的指定位清零,可将待清零位与若想将某个二进制数的指定位清零,可将待清零位与0 0进行进行“按位与按位与”运算,其余位与运算,其余位与1 1进行进行“按位与按位与”运算;运算;若想将该数各位都清零,可使其与零进行若想将该数各位都清零,可使其与零进行“按位与按位与”运算例例11-611-6】将字符变量将字符变量chch所占的字节单元清零所占的字节单元清零程序设计技术基础-C语言【例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;2022/7/2515程序运行结果为:ch=67ch&0后ch=0程序设计技术基础-C语言(2)保留指定位:若想保留某个二进制数中的指定位。

      可将指定位与1进行“按位与”运算,其余位与0进行“按位与”运算即可实现例如对一个十六位二进制整数a,若想要将其高八位清0,而保留其低八位则进行:a&00000000 11111111 运算即可:00000001 00110100 (a=308)(&)00000000 11111111 (=255)00000000 00110100 (=52)2022/7/2516程序设计技术基础-C语言2“按位或”运算(|)按位或”是指参加运算的两个数据,按对应的二进制位分别进行“逻辑或”运算如果两个相应的二进制位都为0,则该位的运算结果为0(假);否则为1(真)即:0|0=0;0|1=1;1|0=1;1|1=1例如13|10的运算为:2022/7/2517 00001101 (=13)(|)00001010 (=10)00001111 (=15)程序设计技术基础-C语言“按位或”运算的一大用途是经常用来对一个数据的某些位置1例11-7】将一个8位的二进制整数的低4位置1,高4位不变2022/7/2518程序如下:程序如下:#includeint main()char x=67;printf(“x初值为%dn”,x);x=x|15;printf(“x|15运算后的值为%dn”,x);return 0;程序运行结果为:程序运行结果为:x初值为初值为67x|15运算后的值为运算后的值为79程序设计技术基础-C语言3“按位异或”运算()“按位异或”是指参加运算的两个数据,按对应的二进制位分别进行“逻辑异或”运算。

      如果两个相应的二进制位为“异”(值不同),则该位的运算结果为1(真);否则运算结果为0(假)即00=0;01=1;10=1;11=0例如:1310的运算为:2022/7/2519 00001101 (=13)()00001010 (=10)00000111 (=7)程序设计技术基础-C语言“按位异或”运算有以下用途:(1)保留原值:与0进行“按位异或”运算,可保留原值即:a0=a例如:130的运算为:00001101 (=13)()00000000 结果为:00001101 2022/7/2520程序设计技术基础-C语言(2)使特定位翻转:与1进行“按位异或”运算,可使操作数特定位进行翻转,即由0变1或者由1变02022/7/2521程序如下:#includeint main()char x=l;printf(“l=%dn”,x);x=x15;printf(x15=%dn,x);return 0;【例例11-811-8】设字符设字符x=x=l l,将其二,将其二进制数的高进制数的高4 4位保位保留原样,低留原样,低4 4位各位各位翻转01101100 (=108)()0000 1111 (=15)0110 0011 (=99)程序运行结果为:l=108x15=99程序设计技术基础-C语言(3)置零:每一个数与它自身进行“异或”运算,结果各位均为零。

      即:xx=02022/7/25224“按位取反”运算()按位取反”运算符“”是唯一的一个单目位运算符,用来将一个二进制数的每一位取反,即将1(真)变0(假),将0(假)变1(真)即0=1;1=0程序设计技术基础-C语言按位取反”运算常用来生成与系统实现无关的常数,以增加程序的可移植性如要将变量如要将变量x=103=x=103=(11001111100111)2 2最低最低6 6位置成位置成0 0,其余位不变用,其余位不变用“按位与按位与”运算实现,就需要考虑运算实现,就需要考虑x x在系统内存放的位数:在系统内存放的位数:如果如果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/2523程序设计技术基础-C语言11.2.2 位移位运算符与运算1“左移”运算()左移运算符“”是双目运算符,左移运算的一般形式为:运算对象左移位数。

      左移的作用是将一个数的各二进制位依次左移若干位(由左移位数给出),左移时,右端(低位)补0,左端(高位)移出的部分舍去2022/7/2524程序设计技术基础-C语言例如,假设以一个字节存一个整数,则无符号整型变量a=15,在执行a=a2后,a的值变为60左移变化过程如下图:可见,左移1位相当于操作数乘以2,左移2位相当于操作数乘以4,左移n位相当于操作数乘以2n,此外,左移运算要比乘法快的多但此结论只适用于该数左移时被溢出舍弃的高位中不包含1的情况2022/7/25250000 11110000 11110001 11100001 11100011 11000011 1100左移一次左移一次左移一次左移一次程序设计技术基础-C语言例如:若变量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/2526程序设计技术基础-C语言#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)break;a=a)右移运算符“”是双目运算符,右移运算的一般形式为:运算对象右移位数右移的作用是将一个数的各二进制位依次右移若干位(由右移位数给出),右移时,右端(低位)移出的部分舍去,左端(高位)移入的二进制数分两种情况:对于无符号数和正整数,高位补0;对于负整数,有的系统高位补1,有的系统高位补0。

      补0的称为“逻辑右移”,即简单右移;补1的称为“算术右移”具体情况需要查阅相应C编译程序用户手册2022/7/2528程序设计技术基础-C语言例如,占一个字节的无符号整型变量a=15,则a=a2后,a的值变为。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.