




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章 位 运 算 位运算是指对二进制位进行的运算。每个二进制位中 只能存放0或1。因此,位运算就是对二进制数的运算。通 常,将一个数据用二进制数表示后,最右边的二进制位称 为最低位(第0位),最左边的二进制位为最高位。 图10.1 微机中整数的二进制位表示 10.1 二进制位运算 10.2 位 段 10.3 程序举例 10.1 二进制位运算 在C语言中共提供了6种位运算符,如表10.1所示。 表10.1 位运算符意 义 & | 按位与 按位或 按位异或 按位取反 左移 右移 (1)在这6种位运算符中,其中按位取反是单目运算符, 只有一个运算对象,其他均为双目运算符,有两个运算对象 。 (2)位运算的运算对象只能是整型(包括int,short,long 和unsigned)或字符型数据,而不能是实型数据。 (3)各位运算符的优先级比较分散,与其他运算符一起, 其优先级从高到低如下: 逻辑非(!)按位取反()算术运算符左移运算符()关系运算符按位与运算符(&),按位异 或运算符(),按位或运算符(|)&与| 赋值运算符 1“按位与”运算符(&) “按位与”的运算符为“&”。其运算规则是:若两个运 算对象的对应二进制位均是1,则结果的对应位是1,否则为0 。 利用“按位与”运算可以实现以下功能: (1)取出数据中指定的位 (2)将数据中的指定位清零 2“按位或”运算符(|) “按位或”的运算符为“|”。其运算 规则是:若两个运算对象的对应二进制位 中有一个是1,则结果的对应位是1,否则 为0。 例10.2 下列C程序的功能是将整型数组中所有元素转换 为不小于它的最小奇数,并显示输出。 #include “stdio.h“ main() int k,a1023,14,24,31,46,55,33,68,27,40; for (k0;k10;k) printf(“%5d“,ak); printf(“n“); for (k0;k10;k) akak|0x01; for (k0;k10;k) printf(“%5d“,ak); printf(“n“); 3“按位异或”运算符() “按位异或”的运算符为“” 。其运算规则是:若两 个运算对象的对应二进制位不相等,则结果的对应位是1, 否则为0。 “按位异或”运算具有以下几个性质: (1)使数据中的某些位取反,即将0变为1,1变为0。 (2)同一个数据进行异或运算后,其结果为0。利用异或 运算的这个性质,可以将变量清零。 (3)可以实现交换两个变量的值: 4“按位取反”运算符() “按位取反”的运算符为“”。其运算规则是:将 运算对象中的各二进制位值取反,即将0变为1,1变为0 。 5“左移”运算符() “右移”运算符为“”。其运算规则是:将运算对象中的 每个二进制位向右移动若干位,从右边移出去的低位部分被 丢弃。但左边空出的高位部分是补0还是补1,要视下列具体 情况而定: 若右移对象为无符号整型数,则右移后左边空出的高位 部分补0。 若右移对象为一般整型数或字符型数据,当该数据的最 高位为0(对于一般整型来说即为正数),则右移后左边空 出的高位部分补0。当该数据的最高位为1(对于一般整型来 说即为正数),则与使用的计算机系统有关,有的计算机系 统将右移后左边空出的高位部分补1,称为“算术右移”; 有的计算机系统将右移后左边空出的高位部分补0,称为“ 逻辑右移”。 10.2 位 段 在C语言中,定义位段结构类型的一般形式为 struct 位段结构类型名 成员表 ; 在定义位段与使用位段时,要注意以下几个问题: (1)位段成员的类型必须是unsigned型。 (2)在位段结构类型中,可以定义无名位段,这种无 名位段具有位段之间的分隔作用。 (3)每个位段(成员)所占的二进制位数一般不能超 过一个字长(即一个存储单元)。 (4)在位段结构类型定义中,可以包含非位段成员。 (5)位段可以在一般的表达式中被引用,并被自动转 换为相应的整数。 10.3 程序举例 例10.3 编写一个C程序,其功能是:从键盘输入一个 无符号整数m以及位移位数n,当n0时,将m循环右 移n位;当n0时,将m循环左移|n|位。 将一个无符号整数m循环移n位的方法如下: 首先用sizeof函数确定一个无符号整数所占的二进制位数 k。 如果是循环右移,则先将m右移n位(即将原数的高kn 位移到低位),再将m左移kn位(即将原数的低n位移到高 位),然后将它们作按位或运算(即将它们合并)。 如果是循环左移,则先将m左移n位(即将原数的低kn 位移到高位),再将m右移kn位(即将原数的高n位移到低 位),然后将它们作按位或运算(即将它们合并)。 其C程序如下: #include “stdio.h“ main() unsigned m; int n; printf(“input m:“); scanf(“%x“,&m); printf(“input n:“); scanf(“%d“,&n); if (n0) printf(“moveright%xn“,moveright(m,n); else printf(“moveleft
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 停止促销活动方案
- 健康在身边活动方案
- 健康徒步活动策划方案
- 健康普查活动方案
- 健康科普传播活动方案
- 健康英文读书会活动方案
- 健康阳光小达人活动方案
- 健胃消食活动方案
- 健身卡活动抽奖活动方案
- 健身房单车竞赛活动方案
- 2024年咨询工程师继续教育城市轨道交通工程可行性研究报告编制方法考试答案
- 版隧道检验批施工质量验收表格
- 仓储管理职位工作手册完整版
- 2024年云南省曲靖经开区政法委招聘2人历年高频考题难、易错点模拟试题(共500题)附带答案详解
- 2024中国成人健康管理洞察之益生菌部分-益普索-202405
- 2024年云南昆明市石林彝族自治县公安局勤务辅警招聘笔试参考题库附带答案详解
- 宝宝喂养记录表
- 产科危重症病人的护理
- 燃烧脂肪-流行健身舞蹈智慧树知到期末考试答案2024年
- 2024年山东省济南市市中区中考二模地理试卷
- (高清版)DZT 0270-2014 地下水监测井建设规范
评论
0/150
提交评论