资源描述:
《《C语言程序设计》第8章 位运算.ppt》由会员上传分享,免费在线阅读,更多相关内容在PPT专区-天天文库。
1、第八章位运算8.1位运算的基本概念⒈计算机内部是二进制表示的;⒉位运算可以对整型或字符型量按二进制的位进行处理;⒊位运算主要有位逻辑和移位运算。位运算不再将数据作为一个整体进行运算,而是对数据中的某个或某几个二进制位进行的运算,也正是因为C语言提供了位运算功能,这就使得C语言有别于其他的高级语言,可以直接用于编写系统程序,常用在检测和控制领域。计算机内的数据表示在计算机中为了表示有符号数,采用符号和数值统一编码的方式。真值机器数编码1.无符号整数所谓无符号整数指的是计数系统中只有大于等于0的数,没有负数,因此,不需要表示符号,所有的二进制位都用于表示数值。2.有符号整数有符号纯整数的编码规则有
2、三种:原码、补码、反码。如果处理的数值数据中有正数、负数和零,则必须通过编码的方式表示符号。⑴原码(n位)整数编码规则:最高位表示符号,绝对值表示数值。真值:X=+1001011BY=-1001011B(8bit)机器数:[X]原=01001011[Y]原=11001011原码的性质:存在两个000000000B、1000000B在运算时需要判断符号。⑵补码计算机系统用有限的二进制位表示数据,是典型的有模计数系统。有模计数系统当计数值超过系统的“模”时系统重新开始计数。有模计数系统有如下性质:如:时钟从9点调整到6点有两种方法:9-3=69+9=12+612位计数系统的模,3,9互为补数。有模
3、计数系统可以将减一个数转化成加该数的补数。也就是可以将减法运算转化成加法运算。利用这一性质,计算机中多采用补码编码,从而简化运算。计数系统的模如果用八位二进制表示一个数,系统的模是28。100000000=00000000计数范围整数编码规则:[X]补=2n+X真值:X=+1001011Y=-1001011(8bit)机器数:[X]补=01001011[Y]补=101101011000000000100101110110101补码的求法:正数:保持原值,前面补0;负数:各位取反,最后一位+1。如:-2的补码(8bit)-0000001011111101+00000001111111101000
4、00000-1=11111111-0000001011111101+0000000111111110按位取反。补码的性质⑴0在补码系统中唯一。⑵[X+Y]补=[X]补+[Y]补[X-Y]补=[X]补-[Y]补=[X]补+[-Y]补性质⑵说明补码系统有一个优点,在不超出数据表示范围的情况下,可以将减法运算转化成加法运算。如:X=+0001010B,Y=0000101BX-Y?根据补码的性质:[X-Y]补=[X]补-[Y]补=[X]补+[-Y]补[X]补=00001010,[-Y]补=1111101100001010+1111101110000010100000101⑶反码编码规则:[X]反=X正
5、数按位取反负数真值:X=+1001011BY=-1001011B(8bit)机器数:[X]反=01001011[Y]反=10110100显然,对于正数:[X]原=[X]补=[X]反;对于负数:[X]补=[X]反+[1]最后一位8.2位运算符C语言提供了2种位运算:逻辑位运算和移位位运算。其中逻辑位运算有4种,移位位运算有2种。其含义如表所示。逻辑位运算符移位位运算符号含义符号含义~按位取反(单目)<<左移(双目)&按位与(双目)按位或(双目)>>右移(双目)∧按位异或(双目)1.按“位”取反(~)(~)0000000000010101(25)1111111111101010177752应用:(
6、1)使最低位为0(16位系统)a=a&0177776(3)改用“~”运算a=a&~1~025=0177752(2)使最低位为0(32位系统)a=a&037777777776【例8-1】按位取反示例。/example8-1按位取反位运算/#includevoidmain(void){intx,y;x=12;y=-12;printf("x=%d,%o,%x",x,x,x);printf("~x=%d,%o,%x",~x,~x,~x);printf("y=%d,%o,%x",y,y,y);printf("~y=%d,%o,%x",~y,~y,~y);}2.按“位”相
7、“与”的特殊用途:(1)清零:对00101011清零00101011(&)1001010000000000(2)取一个数中指定的一些“位”连续的“位”:例:取一个整数A的低字节:不连续的“位”:取0,1,3--5位01010100(&)0011101100010000A=0010,1100,1010,1100A与(377)8相“与”(&)0000,0000,1111,11110000,0000,1