C语言第14章位运算.ppt

上传人:max****ui 文档编号:6334329 上传时间:2020-02-23 格式:PPT 页数:26 大小:369.31KB
返回 下载 相关 举报
C语言第14章位运算.ppt_第1页
第1页 / 共26页
C语言第14章位运算.ppt_第2页
第2页 / 共26页
C语言第14章位运算.ppt_第3页
第3页 / 共26页
点击查看更多>>
资源描述
教学内容 14 1位逻辑运算14 2位移位运算14 3复合位运算14 4位段教学要求 1 掌握按位与运算 按位或运算 按位异或运算 取反运算 左移运算 右移运算的运算规则 2 掌握位段的应用 第14章位运算 为了节省内存空间 在系统软件中常将多个标志状态简单地组合在一起 存储到一个字节 或字 中 语言提供了实现将标志状态从标志字节中分离出来的位运算功能 C既具有高级语言的特点 又具有低级语言的功能 位运算能力就是其特色之一 位运算就是指进行二进制位的运算 C提供的位运算有 名称运算符名称运算符按位与 按位异或 按位或 左移 14 1位逻辑运算 1 位运算说明 1 位运算的操作数 只能是整型或字符型数据 不能为实型数据 2 位运算符中除按位取反 为单目运算符外 其余均为二目运算符 即要求两侧各有一个运算量 3 参与运算时 操作数都必须首先转换成二进制形式 然后再执行相应的按位运算 2 按位与运算符 1 按位与运算符 2 按位与运算格式 操作数 操作数 3 按位与运算规则将2个操作数先转换成二进制数 补码 当参加运算的2个二进制数之对应位都为1 则该位的结果为1 否则为0 即 0 0 00 1 01 0 01 1 1 例 3 5 13的补码 000000115的补码 000001013 500000001取一个数中的某些指定位清零如 a 0010110010101100b 0000000011111111 377 8a b0000000010101100结果得到a的低8位 4 按位与运算作用 main intx y x 25 y 568 printf x y d n x y printf 3 14 d n 3 14 printf 3 14 d n 3 14 printf 12 12 d n 12 12 运行结果 x y 243 14 2 3 14 1212 12 12 例14 1编程对两个整型变量 整型常量分别进行按位与运算 并输出它们的值 程序如下 3 按位或运算 1 按位或运算符 2 按位或运算格式 操作数 操作数 3 运算规则 参加运算的两个运算量之对应位 只要有一个为1 则该位的结果为1 即 0 0 00 1 11 0 11 1 1例如 00110000 060 800001111 017 8 00111111 077 8一个数与017进行按位或运算 可将该数的低4位全置为1 与0377进行按位或运算 可将该数的低8位全置为1 4 异或运算 1 运算符 2 按位异或运算格式 操作数 操作数 3 按位异或运算规则 参加运算的两个运算量的对应位相同 则该位的结果为0 否则为1 即 0 0 00 1 11 0 11 1 0 4 运算的用途 使指定的位翻转如 0111101000001111对应原数的低4位均置为1 01110101原数的低4位被翻转 5 取反运算 1 运算符 2 按位取反运算格式 操作数 3 按位取反运算规则 是对一个二进制数按位取反 即将0变为1 1变为0 例如 a的补码 0000110010010011 a1111001101101100 4 按位取反运算主要用途按位取反运算主要用途是间接地构造一个数 以增强程序的可移植性 例如 通过求 0 可以间接地构造一个各位全1的二进制数 main intx 25 unsignedinty 0 printf 25 d n 25 printf x d n x printf y 1 d n y printf y 2 u n y 运行结果 25 26 x 24 y 1 1 y 2 65535 例14 2编程输出按位取反运算的值 程序如下 14 2位移位运算 1 按位左移运算 1 按位左移运算符 2 按位左移运算格式 操作数 移位数 3 按位左移运算规则 将一个操作数先转换成二进制数 然后将二进制数各位左移若干位 并在低位补若干个0 高位左移后溢出 舍弃不起作用 4 按位左移运算用途 将乘以2n的幂运算处理为左移n位 例如 7 2按位左移表达式的值 28 例14 3变量的位运算符 includemain unsigneda a 7 2 aprintf a d n a 运行结果 a 28 0000000000000111 000000000000011100 整体左移2位 后补2位0 2 右移运算 1 按位右移运算符 2 按位右移运算格式 操作数 移位数值 3 按位右移运算规则 将一个操作数先转换成二进制数 然后将二进制数各位右移若干位 移出的低位舍弃 并在高位补位 补位分2种情况 若为无符号数 右移时左边高位移入0 若为有符号数 如果原来符号位为0 正数 则左边补若干0 如果原来符号位为1 左边补若干0的称为 逻辑右移 左边补若干1的称为 算术右移 如 a 1001011111101101 113755 8逻辑右移a 1 0100101111110110得045766算术右移a 1 1100101111110110得145766 4 按位右移运算主要用途按位右移运算主要用途是对操作数做除法运算 即将一个操作数除以2n的幂运算处理为右移n位的按位右移运算 右移一位相当于除以2 右移n位相当于除以2n 例14 4从键盘上输入1个正整数给int变量n 输出由8 11位构成的数 从低位 0号开始编号 基本思路 1 使变量n右移8位 将8 11位移到低4位上 2 构造1个低4位为1 其余各位为0的整数 3 与n进行按位与运算 4 输出与运算结果 程序如下 main intn mask printf Inputaintegernumber scanf d 例14 5取一个整数a从右端开始的4 7位 先使a右移4位 即 a 7 4 1 a 4 设置一个低4位全为1 其余全为0的数 即 0 4 b a m n 1 c 0 4 c 0 n d b运行情况 1331 133115 字母o 0000001011011001 0000000000101101 a b 例14 6从键盘上输入1个正整数给整型变量n 按二进制位输出该数 include stdio h main intn mask i printf Inputaintegernumber scanf d 程序运行情况 Inputaintegernumber 1000 1000 0000 0011 1110 1000B 1 复合位赋值运算符 复合按位与赋值运算符 复合按位或赋值运算符 复合按位异或赋值运算符 复合按位左移赋值运算符 2 复合位赋值运算规则复合位赋值运算规则与复合算术赋值运算规则相同 运算符表达式等价表达式 x mx x m x mx x m x mx x m x nx x n 14 3复合位运算 14 4位段 C语言引入位段类型 使得当存储1个信息只需二进制的若干位时 二进制的1个 或多个 位就够用 就可以不必占用1个字节 如果仍然使用结构类型 则造成内存空间的浪费 为此 C语言引入了位段类型 1 位段的概念与定义 1 位段类型 位段类型是一种特殊的结构类型 其所有成员均以二进制位为单位定义长度 并称成员为位段 2 位段类型的定义位段类型的定义格式 struct位段类型名 类型说明符成员名1 长度 类型说明符成员名2 长度 位段类型成员的数据类型只能是 int unsignedint 3 位段类型变量的定义 先定义位段类型 再定义位段类型变量 struct位段类型名 类型说明符成员名1 长度 类型说明符成员名2 长度 struct位段类型名变量名表列 定义位段类型同时定义位段类型变量 struct位段类型名 类型说明符成员名1 长度 类型说明符成员名2 长度 变量名表列 例如 CPU的状态寄存器 按位段类型定义如下 structstatus unsignedsign 1 符号标志 unsignedzero 1 零标志 unsignedcarry 1 进位标志 unsignedparity 1 奇偶 溢出标志 unsignedhalf carry 1 半进位标志 unsignednegative 1 减标志 flags 显然 对CPU的状态寄存器而言 使用位段类型 仅需1个字节 比使用结构类型 需要6个字节 节省了5个字节 2 说明 1 因为位段类型是一种结构类型 所以位段类型和位段变量的定义 以及对位段 即位段类型中的成员 的引用 均与结构类型和结构变量一样 2 对位段赋值时 要注意取置范围 一般地说 长度为n的位段 其取值范围是 0 2n 1 3 使用长度为0的无名位段 可使其后续位段从下1个字节开始存储 例如 structstatus unsignedsign 1 符号标志 unsignedzero 1 零标志 unsignedcarry 1 进位标志 unsigned 0 长度为0的无名位段 unsignedparity 1 奇偶 溢出标志 unsignedhalf carry 1 半进位标志 unsignednegative 1 减标志 flags 原本6个标志位是连续存储在1个字节中的 由于加入了1个长度为0的无名位段 所以其后的3个位段 从下1个字节开始存储 一共占用2个字节 4 1个位段必须存储在1个存储单元 通常为1字节 中 不能跨2个 如果本单元不够容纳某位段 则从下1个单元开始存储该位段 5 可以用 d x u和 o等格式字符 以整数形式输出位段 6 在数值表达式中引用位段时 系统自动将位段转换为整型数 同学们再见
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!