《第13章位运算梁.PPT》由会员分享,可在线阅读,更多相关《第13章位运算梁.PPT(17页珍藏版)》请在三一文库上搜索。
1、第13章 位操作,教学目标,位运算符的含义 简单的位运算,13.1概述,位运算: 对二进制位的运算 一、数的表示 1、二进制 特点? 运算规则? 二进制与十进制之间的转化? 例:(25)10 = (11001)2 2、八进制和十六进制 二、八、十六进制如何转化?,一、数的表示,3、原码、反码及补码 计算机中的数均以补码形式存放, 一个有符号定点数的最高位为符号位,0是正,1是负。 正数的反码和补码都是和原码相同。 1. 原码 原码就是这个数本身的二进制形式。 例如(假设是8位的字长) 1000011 就是-3 0000011 就是+3 2. 反码 负数的反码是将其原码除符号位之外的各位求反 -
2、3反=10000011反=11111100 3. 补码 负数的补码是将其原码除符号位之外的各位求反之后在末位再加1。 -3补=10000011补=11111101 一个数和它的补码是可逆的。,一、数的表示,3、原码、反码及补码 为什么要设立补码呢? (1)是为了能让计算机执行减法: a-b补=a补+(-b)补 (2)是为了统一正0和负0 正零:00000000 负零:10000000 这两个数其实都是0,可他们的原码却有不同的表示,但是他们的补码是一样的,都是00000000 特别注意: 如果+1之后有进位的,要一直往前进位,包括符号位!(这和反码是不同的!) 10000000补 =10000
3、000反+1 =11111111+1 =(1)00000000 =00000000(最高位溢出了,符号位变成了0),二、位运算符,C语言中有关二进制位的运算符有六个:(按优先级的高低) & | 取反 左移 右移 与 异或 或,复合赋值运算符 = = &= = |=,位运算符,二、位运算符,运算分量均为整型或字符型量。,1、按位求反 ,036 几进制? 二进制 00 011 110 按位取反 11 100 001 即:036 = (11100001)2,位运算符,二、位运算符,运算分量均为整型或字符型量。,1、按位求反 ,2、按位与 &,0 & 0 = 0 0 & 1 = 0 1 & 0 = 0
4、 1 & 1 = 1,例: 18 & 29 ?,18的补码:0001 0010 29的补码:0001 1101 - & 0001 0000,位运算符,二、位运算符,运算分量均为整型或字符型量。,1、按位求反 ,2、按位与 &,3、按位或 , ,18的补码:0001 0010 29的补码:0001 1101 - | 0001 1111,例: 18 | 29 ?,位运算符,二、位运算符,运算分量均为整型或字符型量。,1、按位求反 ,2、按位与 &,3、按位或 ,4、按位异或 , ,若想使a= 0100 1101中 间四位取反,如何做?,a: 0100 1101 0011 1100 - 0111 0
5、001,位运算符,二、位运算符,运算分量均为整型或字符型量。,1、按位求反 ,2、按位与 &,3、按位或 ,4、按位异或 ,5、左移 ,6、右移 ,设:a = 0001 1011 则: a 3 结果: 1101 1000,设:a = 0001 1011 则: a 3 结果: 0000 0011,思考,1、 a=10; b=5; if (a,a&0xff a&0xff00 a | 0xff a | 0xff00 a 0xff a 0xff00,2、一般的: 保留低字节: 保留高字节: 低字节置1 : 高字节置1 : 低字节翻转: 高字节翻转:,printf(“%d,%dn”,a,0 , 15,13.2 位运算应用举例,从键盘上输入1个正整数给int变量num,输出由 811位构成的数(从低位、0号开始编号)。,基本思路: (1)使变量num右移8位,将811位移到低4位上。 (2)构造1个低4位为1、其余各位为0的整数。 (3)与num进行按位与运算。,13.2 位运算应用举例,/*程序功能:输出一个整数中由811位构成的数*/ main() int num, mask; printf(“Input a integer number: “); scanf(“%d“, ,总结,位运算符的含义 简单的位运算,祝福,预祝同学们取得好成绩!,Thank you,Question?,
链接地址:https://www.31doc.com/p-2547534.html