




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
甘肃工业职业技术学院信息工程系 2009年12月 C语言程序设计 张燎 第十一章位运算 位运算符和位运算 位运算举例 位段 11 1位运算符和位运算 语言提供了六种位运算符 按位与 取反 按位或 右移 说明 1 位运算符除 以外 均为二目运算 即要求两侧各有一个运算量 2 运算量只能是整型或字符型的数据 不能为实型数据 11 1 1 按位与 运算符 功能 对参与运算的两数各对应的二进位相与 只有对应的两个二进制位均为1时 结果位才为1 否则为0 即0 0 0 0 1 0 1 0 0 1 1 1参与运算的数以补码方式出现 例如3 5 应该按位与 00000011 3 00000101 5 00000001 1 按位与的特殊用途 某些位清零 保留某些位 取一个数中某些指定位 例如 把a的高八位清0 保留低八位 可作a 255运算0010110010101100 00000000111111110000000010101100把一个数01010100的左面第3 4 5 7 8位保留下来 01010100 0011101100010000 原来数中为1的位 新数中相应位为0 原来数要保留的位 新数中相应位为1 11 1 2 按位或 运算符 功能 对参与运算的两数各对应的二进位相或 只要对应的两个二进制位有一个为1时 结果位就为1 即0 0 0 0 1 1 1 0 1 1 1 1例如 9 5可写算式如下 00001001 9 00000101 5 00001101 13 可见9 5 13按位或运算常用来对一个数据的某些位定值位1 11 1 3 异或 运算符 功能 对参与运算的两数各对应的二进位相异或 当对应的两个二进制位相异时 结果位就为1 即0 0 0 0 1 1 1 0 1 1 1 0例如 9 5可写算式如下 00001001 9 00000101 5 00001100 12 可见9 5 12 异或 的意思是判断两个相应的位值是否为 异 为 异 就取真 1 否则为假 0 举例说明 运算符的应用 使特定位翻转假设有0111010 想使其低4位翻转 即1变为0 0变为1 01111010 0000111101110101 要想使哪几位翻转 就将与其进行 运算的该几位置为1即可 与0相 保留原值 01111010 0000000001111010 举例说明 运算符的应用 交换两个值 不用临时变量假如a 3 b 4 想将a和b的值互换 可以用以下赋值语句实现 a a b b b a a a b 用竖式来说明 a 011 3 b 100 4 a 111 b 100b 011 3 a 111a 100 4 11 1 4 取反 运算符 功能 对参与运算的数的各二进位按位取反 取反运算符为单目运算符 具有右结合性 例如 9的运算为 0000000000001001 结果为1111111111110110 运算符的优先级高于算数运算符 关系运算符 逻辑运算符 和其他位运算符都高 例如 b a 要先进行 a运算 然后进行 运算 例 a的值64127 11 1 5左移运算符 功能 用来将一个数的各二进位全部左移若干位 高位左移后溢出 舍弃 低位补0 a的二进制形式0100000001111111 a 11000000011111110 a 20000000011111100 左移一位相当于该数乘以2 注意 此种结论只适用于该数左移时被溢出舍弃的高位中不包含1的情况 11 1 6右移运算符 功能 用来将一个数的各二进位全部右移若干位 右移时 需要注意符号位问题 对于无符号数 右移时左边高位移入0 对于有符号数 如果原来符号位为0 该数为正 则左边也是移入0 如果原来符号位为1 即负数 则左边移入0还是1 要取决于所用的计算机系统 移入0的称为 逻辑右移 移入1的称为 算术右移 例如 a 1001011111101101 用二进制形式表示 a 1 0100101111110110 逻辑右移时 a 1 1100101111110110 算术右移时 右移一位相当于该数除以2 右移n位相当于除以2n 11 2位运算举例 例12 1取一个整数a从右端开始的4 7位 1 先使a右移4位 目的是使要取出的那几位移到最右端 右移到右端可以用a 4来实现 2 设置一个低4位全为1 其余全为0的数 可以用 0 4 来实现 0 0000 000000 0 1111 111111 0 4 1111 110000 0 4 0000 001111 3 将上面的 1 2 进行 运算 a 4 0 4 根据上一节介绍的方法 与低4位为1的数进行 运算 就能将这四位保留下来 includevoidmain unsigneda b c d scanf o 331 331 21715 13 11 3位段 对内存中信息的存储一般以字节为单位 实际上 有时存储一个信息不必用一个或多个字节 例如 真 或 假 用0或1表示 只需1位即可 那么 怎样向一个字节中的一个或几个二进制位赋值和改变它的值呢 可以用以下两种方法 可以人为地将一个整型变量data分为几部分 位段 位段 C语言允许在一个结构体中以位为单位来指定其成员所占内存长度 这种以位为单位的成员称为 位段 或称 位域 利用位段能够用较少的位数存储数据 structpacked data unsigneda 2 unsignedb 6 unsignedc 4 unsignedd 4 inti data a占2位 b占6位 c占4位 d占4位 i占2个字节 总共占4个字节 也可以使各个位段不恰好占满一个字节 structpacked data unsigneda 2 unsignedb 6 unsignedc 4 inti data structpacked data unsigneda 2 unsignedb 6 unsignedc 4 unsignedd 4 inti data 在a b c之后4位空间闲置不用 i从另一字节开头起存放 关于位段的定义和引用的几点说明 位段成员的类型必须指定为unsigned或int类型 若某一位段要从另一个字开始存放 可以用以下形式定义 unsigneda 1 unsignedb 2 unsigned 0 unsignedc 1 另一存储单元 用了长度为0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 部队交通安全知识培训课件
- 学习路径规划-洞察及研究
- 【设计】高层住宅小区室外配套施工组织设计
- 部门保密培训课件
- 债权人利益分配策略-洞察及研究
- 边坡喷锚脚手架安全培训课件
- 基于循环经济的原料回收与再利用技术瓶颈突破
- 车队雨季安全培训课件
- 圆弧轨迹动态补偿算法在高速工况下的精度衰减机理研究
- 国际标准对接框架下刀片剪切参数数据库的跨地域知识迁移策略
- 2025年秋国家开放大学《形势与政策》形考大作业答案
- 化工安全网络培训课件
- 2025-2026学年人美版(2024)小学美术二年级上册(全册)教学设计(附目录P188)
- 2025-2026学年地质版(2024)小学体育与健康二年级全一册《别让眼睛受伤害》教学设计
- 2025年高考(新课标Ⅱ卷)英语试题及答案
- 培训机构紧急封控应急预案
- 工地看场自身安全协议书
- 2025便利店便利店员工劳动合同范本
- 小学二年级体育教案全集全册1
- 2025秋八年级上册道德与法治新教材全册知识点提纲
- 车辆安全培训课件
评论
0/150
提交评论