




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 位运算是指对二进制进行的运算,它的运算对象不是以一个数据为单位,而是对组成数据的二进制位进行运算。每个二进制位只能存放0或1,图10.1表示一个整型数据(占两个字节)中的16个二进制位,通常把组成一个数据的最右边的二进制位称为第0位,数据中最左边的二进制位是最高位。正确的使用二进制位运算,将有助于节省内存空间和编写复杂的程序。第第12章章 位运算位运算12.1 12.1 二进制位逻辑运算二进制位逻辑运算C语言中一共提供了六种位运算符。参见下表。运算符名称&按位与|按位或按位异或取反右移除了是单目(只有一个运算对象)运算符之外, 其它的都是双目(有两个运算对象)运算符。位运算的运算对象
2、只能是整型(包括int、short int、unsigned int和long int)或字符型数据,而不能是浮点型数据。位运算符的优先级比较分散,其中按位取反运算符的优先级高于算术运算符和关系运算符的优先级,是所有位运算符优先级最高的;左移运算符(和右移运算符)的优先级高于关系运算符的优先级,但低于算术运算符的优先级;按位与&、按位异或和按位或|运算符的优先级都低于算术运算符和关系运算符的优先级。前4种是位逻辑运算符,后2种是移位运算符。本节先介绍4种位逻辑运算符。下节介绍2种移位运算符4种位逻辑运算符的真值表见下表。位逻辑运算真值表ABAA|BA&BAB0010000111
3、01100101110110一一. “按位与按位与”运算符运算符&“按位与”的运算规则是:如果两个运算对象的对应二进制位都是1,则结果的对应位是1,否则为0。“按位与”运算符用&表示。“按位与”可能的运算组合及其运算结果。例如:若x=84,y=59,则x&y 的计算结果如下所示: 01010100 (x的二进制数) &) 00111011 (y的二进制数) 00010000 (16)即:x&y=16用途:1将数据中的某些位清零如:x是字符型变量(占8个二进制位),要将x的第2位置0,可以进行如下运算:x=x&0 xfb;或写成:x&=0
4、xfb;2可取出数据中的某些位如:为了判断x的第4位是否为0,可进行如下运算:if(x&0 x10)!=0)若条件表达式为真(即不为0),则x的第4位为1,否则为0。【例12.1】从键盘输入一正整数,判断此数是奇数还是偶数。#include ”stdio.h”void main() int i; printf(“请输入一个正整数:”); scanf(“%d”,&i); if(i0) if(i&0 x01)=0) printf(“%d是偶数。n”,i); else printf(“%d是奇数。n”,i); else printf(“输入的数据不是正整数!”);二二.“.“
5、按位或按位或”运算符运算符| |“按位或”的运算规则是:只要两个运算对象的对应位有一个是1,则结果的对应位是1,否则为0。“按位或”运算符用|表示。“按位或”可能的运算组合及其运算结果。例如:若x=0 x17,y=0 x0a,则x|y的计算结果如下所示: 00010111(x的二进制数) |) 00001001 (y的二进制数) 00011111 (0 x1f) 即:x|y=0 x1f 。用途:1“按位或”运算通常用于对一个数据(变量)中的某些位置1,而其余位不发生变化。方法:找一个数,此数的各位是这样取值的,对应x数要置1的位,该数对应位为1,其余位为零。此数与x相或就可使x中的某些位置1。
6、如将x中的第3、4、5位(注:最右方是第0位)置1,可进行如下运算:x=x|0 x38;或写成:x|=0 x38; 三三. “按位异或按位异或”运算符运算符“按位异或”的运算规则是:如果两个运算对象的对应位不相同,则结果的对应位为1,否则为0。“按位异或”运算符用表示。“按位异或”可能的运算组合及其运算结果参见表12-2 。例如:若x=0 x17,y=0 x0a,则xy的计算结果如下所示: 00010111(x的二进制数)) 00001001 (y的二进制数) 00011110 (0 x1e)即:xy=0 x1e 。用途:1使数据中的某些位取反,即0变1,1变0。如要将x中的第5位取反,可进行
7、如下的运算:x=x0 x20;或写成:x=0 x20;2同一个数据进行“异或”运算后,结果为0。如要将x变量清0,可进行如下的运算:x=x3“按位异或”运算具有如下的性质,即:(xy)y=x利用这一性质可以实现两个变量值的交换:若x=8,y=6,则要想将x和y得值交换(不使用临时变量),可执行语句:x=xy; y=yx; x=xy;过程如下: 00001000(x的二进制数))00000110 (y的二进制数) 00001110 (x值已经变为14)00001110 (x的二进制数) 00000110 (x值已经变为6)00000110 (y的二进制数) 00001000 (y值已经变为8)四
8、四.“.“按位取反按位取反”运算符运算符 “按位取反”的运算规则是:将运算对象中的各位的值取反,即将1变为0,将0变为1。“按位取反”运算符是单目运算符,用表示。“按位取反”可能的运算组合及其运算结果。例如:若x=0 x3b,则x的计算结果如下所示: ) 00111011 (x的二进制数) 11000100 (0 xc4) 即:x=0 xc4 。12.2 12.2 移位运算移位运算一、一、 左移运算符左移运算符 “左移”的运算规则是:将运算对象中的每个二进制位向左移动若干位,从左边移出去的高位部分被丢弃,右边空出的低位部分补零。 左移运算符用表示。例如:若x=0 x17,则语句:x=x2 表示
9、将x中的每个二进制位左移2位后存入x中。由于0 x17的二进制表示为00010111,所以左移2位后,将变为: 01011100,即x=x2的结果为0 x5c。 其中语句:x=x2 可以写成:x=2; 在进行“左移”运算时,如果移出去的高位部分不包含1,则左移1位相当于乘以2,左移2位相当于乘以4,左移3位相当于乘以8,依此类推。因此在实际应用中,经常利用“左移”运算来进行乘以2倍的操作。【例12.2】输入两个短整数存入a、b中,并由a 、b两个数生成新的数c,其生成规则是:将a的低字节作为c的高字节,将b的低字节作为c的低字节,并显示出来。#include “stdio.h”void mai
10、n() int a,b,c; printf(“请输入两个短整型数:”); scanf(“%d%d”,&a,&b); c=(a&0 x00ff)8|(b&0 x00ff); printf(“新生产的数:%dn”,c);说明:计算顺序是先计算C=(a&0 x00ff)“右移”的运算规则是:将运算对象中的每个二进制位向右移动若干位,从右边移出去的低位部分被丢弃,对无符号数来讲,左边空出的高位部分补0,对有符号数来讲,如果符号位为0(即正数),则空出的高位部分补0,否则空出的高位部分补0还是补1,与所使用的计算机系统有关,有的计算机系统补0,称为“逻辑右移”,有的计算机系统补1,称为“算术右移”。例如:若x=0 x08,则语句:x=x2; 表示将x中的每个二进制位右移2位后存入x中。由于0 x08的二进制表示为00001000,所以右移2位后,将变为00000010,即x=x2的结果为0 x02,其中语句:x=x2;可以写成:x=2; 由上述运算结果不难看出,在进行“右移”运算时,如果移出去的低位部分不包含1,则右移1位相当于除以2,右移2位相当于除以4,右移3位相当于除以8,依此类推。因此在实际应用中,经常利用“右移”运算
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 纺织机械的智能工厂规划考核试卷
- 组织沟通与团队凝聚力考核试卷
- 鼻炎新人日常护理常规
- 苏教版五年级方程课件
- 护理研究生文献阅读汇报
- 2025汽车销售合同范本范本
- 2025节能灯具购销合同
- 2025电子产品供应合同模板
- 2025商场店面租赁合同范本
- 2025写字楼租赁代理合同范本
- GB4053.3-2009固定式钢梯及平台安全要求第3部分:工业防护栏杆及钢平台
- 销售部长助理岗位职责
- ISOTS 22163专题培训考试
- 六年级下册数学课件-第4单元 比例 整理和复习 人教版(共21张PPT)
- JJF(鲁) 142-2022 称重式雨量计校准规范
- Adobe-Illustrator-(Ai)基础教程
- 程序的运行结果PPT学习教案
- 圆柱钢模计算书
- 合成宝石特征x
- 查摆问题及整改措施
- 年度研发费用专项审计报告模板(共22页)
评论
0/150
提交评论