版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十一章位运算本章要点位运算的相关概念位运算符的含义及使用;位运算的特殊应用;位复合赋值运算符的含义及使用;11.1位运算的概念程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。由于位运算直接对内存数据进行操作,不需要转成十进制,因此处理速度非常快。C语言提供了位运算的功能,这使得C语言也能像汇编语言一样用来编写系统程序。参与运算的数以补码方式出现。参与位运算的只能是整型或字符型数据。11.1.1字节与位二进制数系统中,位,简记为b,也称为比特,每个0或1就是一个位(bit),位是数据存储的最小单位。字节(Byte)是计算机信息存储的最小单位,1个字节等于8位二进制。计算机中的CPU位数指的是CPU一次能处理的最大位数。例如32位计算机的CPU一个机器周期内可以处理32位数据0xFFFFFFFF一个英文的字符占用一个字节,而一个汉字以及汉字的标点符号、字符都占用两个字节。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,如一个ASCII码就是一个字节。字节单位还有KB、MB、GB、TB等,此类单位的换算为:1KB=1024B1MB=1024KB1GB=1024MB1TB=1024GB11.1.2补码一个数据在计算机内部表示成二进制形式称为机器数。机器数有不同的表示方法,常用的有原码、反码、补码。数据的最右边一位是“最低位”,数据最左边一位叫做“最高位”。原码表示规则:用最高位表示符号位,用“0”表示正号,“1”表示负号,其余各位表示数值大小。例如:假设某个机器数的位数为8,则56的原码是00111000,-56的原码是10111000。反码表示规则:正数的反码与原码相同;负数的反码,符号位为“1”不变,数值部分按位取反,即0变为1,1变为0。反码很少直接用于计算机中,它是用于求补码的过程产物。例如:00111000的反码为00111000,10111000的反码为11000111。补码的表示规则:正数的补码与原码相同;负数的补码是在反码的基础上加二进制“1”。例如:00111000的补码为00111000,10111000的补码为11001000。补码是计算机中一种重要的编码形式,采用补码后,可以将减法运算转化成加法运算,运算过程得到简化。正数的补码即是它所表示的数的真值,而负数的补码的数值部份却不是它所表示的数的真值。采用补码进行运算,所得结果仍为补码。一个数补码的补码就是它的原码。与原码、反码不同,数值0的补码只有一个,即[0]补=00000000B。若字长为8位,则补码所表示的范围为-128~+127;进行补码运算时,所得结果不应超过补码所能表示数的范围。在实际应用中,注意原码、反码、补码之间的相互转换,由于正数的原码、补码、反码表示方法均相同,当遇到正数时不需转换。进行转换时,首先判断其符号位,为负时,再进行转换。例:已知某数X的原码为10110110B,求X的补码和反码。由[X]原=10110110B知,符号位为“1”,X为负数。求其反码时,符号位不变,数值部分按位求反,求其补码时,再在其反码的末位加1。计算过程如下:原码:10110110反码:11001001+1补码:11001010求得:[X]反=11001011B,[X]补=11001010B。例:已知某数X的补码11101100B,试求其原码。由[X]补=11101110B知,符号位为“1”,X为负数。补码的补码就是原码,故求其原码表示时,符号位不变,数值部分按位求反,再在末位加1。补码:11101100求反:10010011+1原码:10010100求得:[X]原=10010100B。例:求18-15的值。利用补码,减法运算就转化为加法实现,变成了求[18-15]补,[18-15]补等价为[18]补+[-15]补,先求-15的补码,-15的二进制表示为10001111,则-15的补码为11110000+111110001与18的补码相加00010010[18]补+11110001[-15]补100000011[18]补+[-15]补舍去运算溢出的最高一位(模运算),结果为00000011,符号位为“0”,故为正数,正数的补码为其本身,转化为十进制为3。如果计算机的字长为n位,n位二进制数的最高位为符号位,其余n-1位为数值位,采用补码表示法时,可表示的数X的范围是-2n-1≤X≤2n-1-1,如当n=8时,可表示的有符号数的范围为-128~+127。两个有符号数进行加法运算时,当运算结果超出可表示的有符号数的范围时,就会发生溢出,使计算结果出错。很显然,溢出只能出现在两个同符号数相加或两个异符号数相减的情况下。在计算机中,数据是以补码的形式存储的,所以补码在c语言的学习中有比较重要的地位,而学习补码必然涉及到原码、反码。11.2二进制位运算程序中的所有数据在计算机内存中都是以二进制的形式储存的。在C语言中,位运算就是指直接对整数或字符型数据在内存中的二进制位进行操作。很多系统程序中常要求在位(bit)一级进行运算或处理,C语言提供了按位运算的功能,使其具有很强的优越性,也能像汇编语言一样用来编写系统程序。11.2.1二进制位运算说明:(1)除“~”为单目运算符,其它为双目运算符。(2)运算数只能是整型或字符型的数据,不能为实型、结构体等类型的数据(3)两个不同长度的运算数进行位运算时,系统会将两个数按右端对齐,再将位数短的一个运算数往高位扩充,即:无符号数和正整数左侧用0补全;负数左侧用1补全。下面对各种位运算符的运算规则及其应用作以介绍。1.按位“与”运算符“&”运算规则:参与运算的两个数各对应的二进制位相“与”,也就是说只有对应的两个二进制位均为1时,结果位才为1,否则为0。即:0&0=0,0&1=0,1&0=0,l&1=1。按位与的应用:(1)获取一个二进制数指定位的值。(2)定位清零。2.按位“或”运算符“|”运算规则:参与运算的两个数对应的二进制位相“或”,也就是说只有对应的两个二进制位均为0时,结果位才为0,否则为1。即:0|0=0,0|1=1,1|0=l,1|1=1。按位或的应用:利用按位或运算将一个数据指定位值为1。3.按位“异或”运算符“^”运算规则:参与运算的两个数对应的二进制位相“异或”,也即是说当二进制位相异时,结果为1,否则为0。即:0^0=0,0^1=1,1^0=l,1^1=0。按位异或的应用:(1)定位翻转,也就是说使指定位的值发生变化,1变成0,0变成1。(2)不用临时变量,交换两个值。(3)定位保留原值,也就是说保留指定位的值,使其不发生变化。利用保留原值位为0的二进制数与其进行“异或”运算,此位值不会发生变化。4.按位“取反”运算符“~”运算规则:参与运算的一个数的各二进位按位取“反”,也就是说0变成1,1变成0。即:~0=1,~1=0。按位取反的应用:适当的使用可增加程序的移植性。5.“左移”运算符“<<”运算规则:将“<<”与算符左边的运算数的二进制位全部左移若干位,高位左移溢出部分丢弃,低位补0。左移运算的应用:当不超出数值的值域时,可以通过左移实现一个数据与2的n次方相乘的操作。6.“右移”运算符“>>”运算规则:将“>>”与算符左边的运算数的二进制位全部右移若干位,低位右移部分丢弃。对于无符号数高位补0;对于有符号数,如果原来符号位为0(正数),则高位补0,如果符号位为1(负数),则高位补0或1由计算机系统决定。右移运算的应用:右移一位相当于该数除以2;右移n位相当于该数除以2的n次方。11.2.2位复合赋值运算符说明:(1)运算符为双目运算符。(2)右值只能是整型或字符型的数据,不能为实型、结构体等类型的数据。(3)左侧运算数必须是左值。运算规则:位复合赋值运算符先对右值进行相应的位运算,然后再将运算结果赋值给与算符左侧的变量。11.3应用程序举例ex1110输入一个数m,输出其所对应二进制数的从右端开始的第6至8位。分析:首先先使m右移5位,使要取出的那几位移到最右端,再设置一个数n低3位全为1,其余的位全为0的数,即将一个全1的数左移3位,这样右端低3位为0,最后将m&n,将m的低3位取出。程序如下:#include"stdio.h"main(){intm,n,p,t;printf("Pleaseinputmdezhi:");scanf("%d",&m);n=m>>5;p=~(~0<<3);t=n&p;printf("m=%d,t=%d\n",m,t);}程序运行:输入416↙在输出结果屏上显示:m=416,t=5说明:输入416,m的值为416,对应的二进制数为0000000110100000,m左移5位后为0000000000001101赋值给n,p的值二进制数为0000000000000111,n&p的值对应二进制数为0000000000000101赋值给变量t。11.4错误解析1.位运算要求操作数的数据类型为整型。2.左移运算将一个位串信息向左移指定的位,左端移出的位的信息就被丢弃,右端空出的位用0补充。例如014<<2,结果为060,即48。3.右移运算将一个位串信息向右移指定的位,右端移出的位的信息被丢弃。例如12>>2,结果为3。与左移相反,对于小整数,每右移1位,相当于除以2。在右移时,需要注意符号位问题。对无符号数据,右移时,左端空出的位用0补充。对于带符号的数据,如果移位前符号位为0(正数),则左端也是用0补充;如果移位前符号位为1(负数),则左端用0或用1补充,取决于计算机系统。对于负数右移,称用0补充的系统为“逻辑右移”,用1补充的系统为“算术右移”。11.5小
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高考物理总复习专题十三热学第3讲热力学定律练习含答案
- 春运期间全程出行安全手册
- 《变压器的简单介绍》课件
- 九年级历史上册 第6课 古代世界的战争与征服教案1 新人教版
- 2024-2025学年高中历史 第二单元 古代历史的变革(下)第4课 商鞅变法与秦的强盛(1)教学教案 岳麓版选修1
- 2024年秋八年级物理上册 第一章 第4节 测量平均速度教案 (新版)新人教版
- 高中政治 第三专题 联邦制、两党制、三权分立:以美国为例 第四框题 美国的利益集团教案 新人教版选修3
- 2024年五年级语文上册 第二单元 语文园地二配套教案 新人教版
- 2023六年级数学上册 七 负数的初步认识第1课时 认识负数教案 西师大版
- 租赁工业吊扇合同范本(2篇)
- 初三【语文(统编)】《范进中举》中人物丑态的表现课件
- 2022年全国高中数学联赛福建赛区预赛试卷参考答案
- 物业管理风险管控
- 电泳-厚-度-检-测-记录
- 治安巡防大队绩效考评细则
- 服务采购询比价表
- 卫生院会议制度
- 小学 四年级 体育水平二 基本运动技能平衡篇 课件
- 巧克力简介课件
- 初中语文人教七年级上册要拿我当一挺机关枪使用
- 沪教版初中语文目录(六到九年级)
评论
0/150
提交评论