




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
概述 所谓位运算是指进行二进制位的运算 在系统软件中 常要处理二进制位的问题 C语言提供了按位运算的功能 这使得它与其它高级语言相比 具有很强的优越性 一个字节含8个二进制位 从右向左编号依次记作 第0位 第1位 第7位 每一位称作一个bit 非0即1 11 1位运算符及优先级 字节和位 不同类型的数据各占不同的字节数 11 1位运算符及优先级 字节和位 位运算的目的 就是要对单字节或构成数据的几个字节的1个 几个或全部bit位作运算 运算类型 置1 置0 左移 右移等 位运算的对象 只能是字符型和整型数据 以及位段 11 1位运算符及优先级 字节和位 11 1位运算符及优先级 位运算符及优先级别 规则 0 0 00 1 1 0 01 1 1用途 特定位清0 取指定位 低4位 a xxxxxxxxa xxxxxxxx b 01111111 b 00001111c 0 xxxxxxxc 0000 xxxx取指定位 即保留指定位 其它位全部清0 常称被屏蔽 b称为屏蔽字 11 2位运算 按位与运算 规则 0 0 0 0 1 1 0 1 1 1 1进行运算的两个位只要有一个为1 结果就为1 只有两个位都为0时 结果才为0 用途 对某些位置1 不管原来该位是1或0 a xxxxxxxxxxxxxxxx b 1111111100000000c 11111111xxxxxxxx 11 2位运算 按位或运算 输入大写字母 变为小写字母输出 分析 大写字母从65 90 小写字母从97 122 差32 写成二进制数后发现 仅在第5位上有差异 11 2位运算 按位或运算 A01000001Z01011010a01100001z01111010即差32 其十六进制数为0 x20 11 2位运算 按位或运算 includemain charc printf inputdaxiezimu scanf c 运算规则 0 0 00 1 1 0 11 1 0进行运算的两个位不相同 即相异 时 结果为1 相同时 结果为0 不进位的加法 用途 用1使特定位翻转 即0变1 1变0a 10111001a 01111010 b 00101010 b 10101101c 10010011c 11010111 交换两个值 不用中间变量即 a a b b b a a a b 11 2位运算 按位异或运算 若a 13a 1101b 1010a 0111b 10 b 1010 a 0111 b 1101 运算结果a 0111b 1101a 1010 11 2位运算 按位异或运算 运算规则 对整个操作对象按位取反 0变1 1变0 用途 常用作位运算的中间步骤 例 十进制单字节数21 00010101按位取反的结果为 11101010即十进制单字节数234 注 一目运算符 优先级最高 原数与取反后的数的和为模 8位二进制的最大数 减1 21 234 255 256 1 11 2位运算 按位取反运算 运算规则 将各二进制位均左移指定的位数 右面补0 左面移出的位 高端 溢出 用途 当左移移出的位为0时 左移相当于乘2n 例如 对单字节数45 左移2位后 再左移1位 45 00101101 2180 10110100 1104 01101000高位1移出 丢失 注 如果要保留高端移出的位 应先将其取保存 11 2位运算 左移运算 运算规则 将各二进制位均右移指定的位数 右面移出的位 低端 丢失 左面补 对无符号数 左面 高位 补0 对有符号数 正数补0 负数补1用途 右移相当于除2n 例 对单字节无符号数182 右移2位 结果是 182 10110110 245 00101101低位丢失10 高位补00 11 2位运算 右移运算 有5种 与算术的赋值运算符结合构成 a b a a ba b a a ba b a a ba 2 a a 2 11 2位运算 复合的赋值位运算 仅适用于 三种运算 参加运算的对象可是 变量 常量 注 常量参加运算应先指明类型 不宜直接参加位运算 运算规则 采取右对齐 左端补齐 补齐的方法 按位进行指定的运算 对无符号整数 补0对有符号整数 0 补0 0 补1 11 2位运算 不同长度数据的位运算 分析 先将4 8位右移到最低位 高位补0 组成一新数 设计c低4位为1 其余位为0 进行与 屏蔽掉高位即可 11 3位运算举例 取整数a的4 8位 includemain unsignedinta b c d printf inputa scanf u 11 3位运算举例 取整数a的4 8位 说明 循环右移n位即原来右边低的n位 移到原来的高位 而原来左边的16 n位右移n位 a右端n位放到b的高n位中 即左移16 n位b a n 将b c按位或 即可完成循环右移 11 3位运算举例 两字节无符号整数a循环右移n位 有时 存储1个信息不必占用1个字节 只需二进制的1个 或多个 位就够用 如果仍然使用结构类型 则造成内存空间的浪费 为此 C语言引入了位段类型 11 4位段 所谓位段类型 是一种特殊的结构类型 其所有成员均以二进制位为单位定义长度 并称成员为位段 例如 CPU的状态寄存器 按位段类型定义如下 structstatus unsignedsign 1 符号标志 unsignedzero 1 零标志 unsignedcarry 1 进位标志 unsignedparity 1 奇偶 溢出标志 unsignedhalf carry 1 半进位标志 unsignednegative 1 减标志 flags 11 4位段 位段的概念与定义 1 因为位段类型是一种结构类型 所以位段类型和位段变量的定义 以及对位段 即位段类型中的成员 的引用 均与结构类型和结构变量一样 2 对位段赋值时 要注意取置范围 一般地说 长度为n的位段 其取值范围是 0 2n 1 3 使用长度为0的无名位段 可使其后续位段从下1个字节开始存储 例如 11 4位段 说明 structstatus unsignedsign 1 符号标志 unsignedzero 1 零标志 unsignedcarry 1 进位标志 unsigned 0 长度为0的无名位段 unsignedparity 1 奇偶 溢出标志 unsignedhalf carry 1 半进位标志 unsignednegative 1 减标志 flags 11 4位段 说明 原本6个标志位是连续存储在1个字节中的 由于加入了1个长度为0的无名位段 所以其后的3个位段 从下1个字节
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 木竹材刨切工艺考核试卷及答案
- 桥梁施工安全防护设施验收工艺考核试卷及答案
- 橡胶硫化设备安全操作工艺考核试卷及答案
- 酶制剂提取工三级安全教育(班组级)考核试卷及答案
- 园林工程技术试题及答案
- 2025-2026学年赣美版(2024)小学美术三年级上册《体验先民生活》教学设计
- 银行支付结算试题及答案
- 银行运营管理岗位考试题及答案
- 银行英语考试题型及答案
- 银行信用度测试题及答案
- 次氯酸钠培训
- 腰椎间盘突出伴神经根病
- 幼儿园孩子受伤赔偿协议书范文
- 合肥市肥东县大学生乡村医生专项计划招聘考试真题
- 林地恢复协议书(2篇)
- 2024年哈尔滨卫生系统考试真题
- 非结核分枝杆菌病诊断与治疗指南(2020年版)解读课件
- 内部控制手册
- 护理分层培训考核分析问题总结
- 研学大赛理论模拟试题二附有答案
- 红火蚁监测和防控技术
评论
0/150
提交评论