C语言程序设计详细教程.ppt

上传人:max****ui 文档编号:6334009 上传时间:2020-02-23 格式:PPT 页数:16 大小:238.81KB
返回 下载 相关 举报
C语言程序设计详细教程.ppt_第1页
第1页 / 共16页
C语言程序设计详细教程.ppt_第2页
第2页 / 共16页
C语言程序设计详细教程.ppt_第3页
第3页 / 共16页
点击查看更多>>
资源描述
第11章位运算 为了节省内存空间 在系统软件中常将多个标志状态简单地组合在一起 存储到一个字节 或字 中 语言是为研制系统软件而设计的 所以她提供了实现将标志状态从标志字节中分离出来的位运算功能 所谓位运算是指 按二进制位进行的运算 11 1数值在计算机中的表示11 2位运算11 3位段 Return 11 1数值在计算机中的表示 1 二进制位与字节计算机系统的内存储器 是由许多称为字节的单元组成的 1个字节由8个二进制位 bit 构成 每位的取值为0 1 最右端的那1位称为 最低位 编号为0 最左端的那1位称为 最高位 而且从最低位到最高位顺序 依次编号 图11 1是1个字节各二进制位的编号 图11 11个字节各二进制位的编号2 数值的原码表示数值的原码表示是指 将最高位用作符号位 0表示正数 1表示负数 其余各位代表数值本身的绝对值 以二进制形式表示 的表示形式 为简化描述起见 本节约定用1个字节表示1个整数 例如 9的原码是00001001 符号位上的0表示正数 9的原码是10001001 符号位上的1表示负数3 数值的反码表示数值的反码表示分两种情况 1 正数的反码 与原码相同 例如 9的反码是00001001 2 负数的反码 符号位为1 其余各位为该数绝对值的原码按位取反 1变0 0变1 例如 9的反码 因为是负数 则符号位为 1 其余7位为 9的绝对值 9的原码0001001按位取反为1110110 所以 9的反码是11110110 4 数值的补码表示数值的补码表示也分两种情况 1 正数的补码 与原码相同 例如 9的补码是00001001 2 负数的补码 符号位为1 其余位为该数绝对值的原码按位取反 然后整个数加1 例如 9的补码 因为是负数 则符号位为 1 其余7位为 9的绝对值 9的原码0001001按位取反为1110110 再加1 所以 9的补码是11110111 已知一个数的补码 求原码的操作分两种情况 1 如果补码的符号位为 0 表示是一个正数 所以补码就是该数的原码 2 如果补码的符号位为 1 表示是一个负数 求原码的操作可以是 符号位不变 其余各位取反 然后再整个数加1 例如 已知一个补码为11111001 则原码是10000111 7 因为符号位为 1 表示是一个负数 所以该位不变 仍为 1 其余7位1111001取反后为0000110 再加1 所以是10000111 5 数值在计算机中的表示 补码在计算机系统中 数值一律用补码表示 存储 原因在于 使用补码 可以将符号位和其它位统一处理 同时 减法也可按加法来处理 另外 两个用补码表示的数相加时 如果最高位 符号位 有进位 则进位被舍弃 Return 11 2位运算 11 2 1位运算及其运算符1 按位与 1 格式 x y 2 规则 对应位均为1时才为1 否则为0 3 9 1 例如 3 9 1 0011 1001 0001 1 3 主要用途 取 或保留 1个数的某 些 位 其余各位置0 2 按位或 1 格式 x y 2 规则 对应位均为0时才为0 否则为1 3 9 11 例如 3 9 11 0011 1001 1011 11 3 主要用途 将1个数的某 些 位置1 其余各位不变 3 按位异或 1 格式 x y 2 规则 对应位相同时为0 不同时为1 3 9 10 3 主要用途 使1个数的某 些 位翻转 即原来为1的位变为0 为0的变为1 其余各位不变 4 按位取反 1 格式 x 2 规则 各位翻转 即原来为1的位变成0 原来为0的位变成1 在IBM PC机中 0 0 xffff 9 0 xfff6 3 主要用途 间接地构造一个数 以增强程序的可移植性 5 按位左移 1 格式 x 位数 2 规则 使操作数的各位左移 低位补0 高位溢出 5 2 20 6 按位右移 1 格式 x 位数 2 规则 使操作数的各位右移 移出的低位舍弃 高位 1 对无符号数和有符号中的正数 补0 2 有符号数中的负数 取决于所使用的系统 补0的称为 逻辑右移 补1的称为 算术右移 例如 20 2 5 说明 1 x y和 位数 等操作数 都只能是整型或字符型数据 除按位取反为单目运算符外 其余均为双目运算符 2 参与运算时 操作数x和y 都必须首先转换成二进制形式 然后再执行相应的按位运算 例如 5 2 5 10100 00101 3 实现 运算主要用途的方法1 构造1个整数 该数在要取 或保留 的位 或要置1的位 或要翻转的位上为1 其余均为0 2 进行按位与 或按位或 或按位异或操作 4 实现按位取反主要用途的方法1 求 0 间接地构造一个全1的数 2 按需要进行左移或右移操作 构造出所需要的数 例如 直接构造一个全1的数 在IBM PC机中为0 xffff 2字节 而在VAX 11 780上 却是0 xffffffff 4字节 如果用 0来构造 系统可以自动适应 具体应用 请参见 案例11 1 11 2 2应用举例 案例11 1 从键盘上输入1个正整数给int变量num 输出由8 11位构成的数 从低位 0号开始编号 基本思路 1 使变量num右移8位 将8 11位移到低4位上 2 构造1个低4位为1 其余各位为0的整数 3 与num进行按位与运算 案例代码文件名 AL11 1 C 程序功能 输出一个整数中由8 11位构成的数 main intnum mask printf Inputaintegernumber scanf d 程序演示 程序运行情况 Inputaintegernumber 1000 result 0 x3程序说明 0 4 按位取0的反 为全1 左移4位后 其低4位为0 其余各位为1 再按位取反 则其低4位为1 其余各位为0 这个整数正是我们所需要的 案例11 2 从键盘上输入1个正整数给int变量num 按二进制位输出该数 案例代码文件名 AL11 2 C 程序功能 按二进制位输出一个整数 include stdio h main intnum mask i printf Inputaintegernumber scanf d 程序演示 程序运行情况 Inputaintegernumber 1000 1000 0000 0011 1110 1000B11 2 3说明1 复合赋值运算符除按位取反运算外 其余5个位运算符均可与赋值运算符一起 构成复合赋值运算符 2 不同长度数据间的位运算 低字节对齐 短数的高字节按最高位补位 1 对无符号数和有符号中的正数 补0 2 有符号数中的负数 补1 Return 11 3位段简介 有时 存储1个信息不必占用1个字节 只需二进制的1个 或多个 位就够用 如果仍然使用结构类型 则造成内存空间的浪费 为此 C语言引入了位段类型 1 位段的概念与定义所谓位段类型 是一种特殊的结构类型 其所有成员均以二进制位为单位定义长度 并称成员为位段 例如 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 在数值表达式中引用位段时 系统自动将位段转换为整型数 Return
展开阅读全文
相关资源
相关搜索

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


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

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


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