C语言程序设计教程(第2版)课件第12章.ppt

上传人:max****ui 文档编号:6333659 上传时间:2020-02-23 格式:PPT 页数:16 大小:359.81KB
返回 下载 相关 举报
C语言程序设计教程(第2版)课件第12章.ppt_第1页
第1页 / 共16页
C语言程序设计教程(第2版)课件第12章.ppt_第2页
第2页 / 共16页
C语言程序设计教程(第2版)课件第12章.ppt_第3页
第3页 / 共16页
点击查看更多>>
资源描述
第12章位运算 本章要点位运算符和位的逻辑运算位的复合运算位段的概念与运用本章难点对位段的理解 12 1二进制位运算概述 1 位 bit 是指二进制中的位 它是计算机能处理的最小单位 2 字节 byte 是计算机处理的基本单位 计算机的内存是按字节进行分配的 一个字节有八位二进制数组成 所以我们在C语言中数据类型都是以字节为基本单元 3 补码 一个正数的补码是其本身 一个负数的补码是其绝对值按位取反后加1 计算机是以补码的形式存放数的 例如 7的补码是1111111111111001 12 2位的运算符 一 位运算的概念 位运算 以二进制位为单位的运算 二 位运算符 位运算 仅限于整数 整型数和字符型 表12 1位运算符及其功能 12 2扩展运算符及其含义 位逻辑运算符 按位求反 按位与 按位异或 按位或 运算规则 1 0 0 10 0 00 1 01 0 01 1 10 0 00 1 11 0 11 1 00 0 00 1 11 0 11 1 1 例如 main unsignedchara b a 0 x9d b 0 xa5 printf a x n a printf a 输出结果 a a b a b a b 62 85 bd 38 位逻辑运算符的应用 运算符的应用 与0相 清0 与1相 取指定位 运算符的应用 与1相 可对某些位定值为1 运算符的应用 与1相 使特定位翻转 2 位移位运算符 按位右移 运算规则 移位时 移出的位数全部丢失 移出的空位补入的数与左移还是右移有关 左移 补入的数全都是0 例如 unsigneda 3 a 1的十进制值是 12 1 3 位复合赋值运算符 由位运算符与赋值运算符组成 例如 a b相当于a a ba 2相当于a a 2 总结位运算符 1 位运算符中按位取反运算符的优先级最高 它比算术运算符 关系运算符 逻辑运算符和其他位运算符都高 2 位运算符与赋值运算符相结合可以组成复合的赋值运算符 例如 3 如果两个类型长度不同的数进行位运算 则需要进行补位 如a b b为int型 a为long型 系统将二者右端对齐并对较短的数b进行左补位 如果b为正数 则左侧16位补满0 如b为负数 左端应补满1 如果b为无符号整型数 则左侧补满0 例 设计一个函数 给出一个数的原码 得到该数的补码 分析 根据补码的定义 一个正数的补码等于该数的原码 一个负数的补码等于该数的反码加1 假设a为16位整数 则步骤为 1 判别给定整数是正数还是负数 方法是 z a若z等于0 则a为正数 若为非0 则a为负数 2 如果z非0 有z a 1 0 x80000 否则z a 3 返回z 程序如下 includemain inta get int printf 输入一个十六进制数 n scanf x 运行结果为 输入一个十六进制数 4e5它的补码是 4e5 三 位运算符的优先级 添加 位运算符自身的优先级为 从高到低 位运算符与其他运算符相比较优先级为 从高到低 算术运算符 关系运算符 逻辑运算符 条件运算符 赋值 复合赋值 运算符 逗号运算符 例如 chara 9 b 020 printf o n a 输出结果 40 12 3位段 位段 在一个结构体中可以以位为单位来指定其成员所占内存长度 这种以位为单位的成员称为位段 或位域 如 structpacked data unsigneda 2 unsignedb 3 unsignedc 4 inti data 位段的引用 结构体变量名 位段成员名 如 structpacked data unsigneda 2 unsignedb 3 unsignedc 4 inti data 位段的引用如下 data a 2 data b 7 data c 9 注意 位段允许的最大值范围 data a 9 说明 位段成员的类型必须指定为unsignedint类型 允许在位段中定义无名字段 其含义为跳过该字节剩余的位或指定的位不用 当无名字长度为0时 跳过该字节剩余的位不用 当无名字段长度为n时 跳过n位不用 如 structpacked data unsigneda 2 unsignedb 3 unsigned 0 unsignedc 4 inti data 又如 structpacked data unsigneda 2 unsignedb 3 unsigned 2 unsignedc 4 inti data 位段的长度不能大于存储单元的长度 即 16位 不能定义位段数组 位段可以在数值表达式中引用 也可以用整型格式输出 12 4小结 1 按位与 C语言规定按位与的运算规则为 如果参与运算数据的二进制位都为1 则结果为1 否则只要有0出现的那个二进制位结果都为0 2 按位或 按位或的运算规则为 只要参与运算的两个数中对应的二进制位为1 则结果的对应位为1 否则为0 3 按位异或 按位异或运算的运算规则为 如果两个运算对象的对应位不相同 则结果为1 否则为0 4 按位取反 按位取反运算的规则为 将一个数中的各位二进制数取反 即1变为0 0变为1 5 左移运算 右移运算符的运算规则是 将运算对象中的每个二进制位向右移若干位 从右边移出的低位部分被舍弃 对无符号的数来说 左边空出的部分补0 对有符号数来说 如果符号位为0 则空出的高位部分补0 对于有符号数中的负数 取决于所使用的系统 补0的称为 逻辑右移 补1的称为 算术右移 7 所谓位段就是将一个机器字分成几段 以占用二进制位的数目来管理数据 它常常是用来表示和处理不需要整字节存储的信息 这样的信息可能是3位 也可能是9位 甚至是它们的组合 位段类型也称为数据结构体类型 因此其类型定义的方法和结构体相同 不过对于非整数字节的成员 应当使用unsigned或unsignedint来定义成员 并指明所占的位数
展开阅读全文
相关资源
相关搜索

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


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

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


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