版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
掌握基本位运算的形式掌握位运算的一般性计算方法10.1几个基本概念【问题】我们知道任何信息在计算机中都是以二进制形式表示,而我们日常生活中使用的是十进制,由于位运算是指进行二进制位的运算,因此在学习位运算之前我们有必要了解与回顾一下计算机内数据组织与存储形式。10.1.1字节与位字节(byte)是计算机中的存储单元。一个字节可以存放一个英文字母或符号,一个汉字通常要用两个字节来存储。每一个字节都有自己的编号,叫做“地址”。1个字节由8个二进制位(位的英文是bit)构成,每位的取值为0或1。最右端的那1位称为“最低位”,编号为0;最左端的那1位称为“最高位”,而且从最低位到最高位顺序,依次编号。7654321010.1.1字节与位我们把若干字节组成一个单元,叫做“字”(word)。一个字可以存放一个数据或指令。至于一个字由几个字节组成,取决于计算机的硬件系统。一般由1个、2个或4个字节组成,所对应的计算机也被称为“8位机、16位机或32位机”。目前微机以16位机或32位机为主。在本书中作为原理讲述的是8位机。10.1.2原码把最高位留做表示符号,其他7位表示二进制数,这种编码方式叫做原码。最高位为“0”表示正数,为“1”表示负数。例如:00000011 表示 +310000011 表示 -3显然,这样可以表示的数值范围在+127到-127之间。这种表示方法有一个缺陷,数值0会出现歧义:00000000 表示 +010000000 表示 -010.1.3反码对于正数,反码与原码相同。例如:00000011 表示 +3。所谓“反码”是指与“原码”在表示负数时相反:符号位(最高位)为“1”表示负数。但其余位的值相反。例如,11111100表示-3。显然,这样可以表示的数值范围在+127到-127之间。这种表示方法仍然有一个缺陷,数值0会出现歧义:00000000 表示 +011111111 表示 -010.1.4补码对于正数,补码与原码相同。0的补码为00000000。这样,0的表示唯一。对于负数,可以从原码得到补码。步骤如下:符号位不变,其余各位取反;整个数加1。已知补码,求原码:符号位不变,其余各位取反整个数加1。10.1.4补码例如,已知补码为11111001,求原码。符号位为“1”,表示是一个负数,所以该位不变,仍为“1”;其余7位1111001取反后为0000110;再加1,所以是10000111(-7)。计算机中的数据都采用补码。原因是:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。如-3+4可以变成-3的补码与+4的补码相加两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。10.2位运算符和位运算位运算表10.2.1按位取反【运算符】~
【格式】~x
【功能】各位翻转,即原来为1的位变成0,原来为0的位变成1。
【主要用途】间接地构造一个数,以增强程序的可移植性。
【示例】如x=83,y=~x,则y=172。83(01010011)
~83(~01010011)
172(10101100)
10.2.2按位与【运算符】&【格式】x&y【功能】当两个操作对象二进制数的相同位都为1时,结果数值的相应位为1,否则为相应位是0。【主要用途】取(或保留)1个数的某(些)位,其余各位置0。【示例】如x=146,y=222,z=x&y,则z=146。10.2.3按位或【运算符】|【格式】x|y【功能】当两个操作对象二进制数的相同位都为0时,结果数值的相应位为0,否则为相应位是1。【主要用途】将1个数的某(些)位置1,其余各位不变。【示例】如x=146,y=222,z=x|y,则z=222。10.2.4按位异或【运算符】^【格式】x^y【功能】当两个操作对象二进制数的相同位的值相同时,结果数值的相应位为0,否则为相应位是1。【主要用途】使1个数的某(些)位翻转(即原来为1的位变为0,为0的变为1),其余各位不变。【示例】如x=146,y=222,z=x^y,则z=76
10.2.5左位移【运算符】<<【格式】x<<要位移的位数【功能】把操作对象的二进制数向左移动指定的位,并在右面补上相应的0,高位溢出。【示例】如x=01010011,y=x<<2,则y=10110000。【注意】左移会引起数据的变化,具体说,左移一位相当于对原来的数值乘以2。左移n位相当于对原来的数值乘以2n。10.2.6右位移【运算符】>>【格式】x>>要位移的位数【功能】把操作对象的二进制数向右移动指定的位,移出的低位舍弃;高位:(1)对无符号数和有符号中的正数,补0;(2)有符号数中的负数,取决于所使用的系统:补0的称为“逻辑右移”,补1的称为“算术右移”。【示例】如x=01010011,y=x>>2,则y=00010100【注意】右移会引起数据的变化,具体说,右移一位相当于对原来的数值除以2。右移n位相当于对原来的数值除以2n说明x、y和“位数”等操作数,都只能是整型或字符型数据。除按位取反为单目运算符外,其余均为双目运算符。参与运算时,操作数x和y都必须首先转换成二进制形式,然后再执行相应的按位运算。例如:5<<2→20即101<<10→10100,20>>2→5即10100>>10→00101。复合赋值运算符除按位取反运算外,其余5个位运算符均可与赋值运算符一起,构成复合赋值运算符:&=、|+、^=、<<=、>>=。例如,a&=b相当于a=a&b。a<<=2相当于:a=a<<2。不同长度数据间的位运算──低字节对齐,短数的高字节按最高位补位:对无符号数和有符号中的正数,补0;有符号数中的负数,补1。
10.3程序举例【例10-1】取一个整数a从右端开始的4~7位。#include<stdio.h>void
main()
{unsigneda,b,c,d;
scanf("%o",&a);
b=a>>4; c=~(~0<<4);d=b&c;
printf("%o,%d\n%o,%d\n",a,a,d,d);
}【例10-2】从键盘上输入一个正整数给int变量num,按二进制位输出该数。 #include“stdio.h“
voidmain()
{ intnum,mask,i;
printf(”Inputaintegernumber:”);
scanf(“%d”,&num);
mask=1<<15;
printf(“%d=”,num);
for(i=1;i<=16;i++)
{putchar(num&mask?‘1’:‘0’);
num<<=1;
if(i%4==0)putchar(‘,’);
}
printf("\bB\n");
} 本章介绍的位运算在系统软件开发与计算机用于检测和控制领域中有重要应用,也是C语言的特色之一。重点要求读者掌握位运算符及其应用。学好本章必须了解计算机内数据的组织与存储形式,二进制的原理是关键。本章介绍的位运算包括按位与(&)、按位或(|)、按位异或(^)、按位取反(~)、左移(<<)、右移(>>),实质上都是1和0的变换或者移动,学好本章对今后计算机系统的编程很有好处。编写一个函数getbits,从一个16位的单元中取出某几位(即该几位保留原值,其余位为0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 职业规划及创业计划
- 关于外科常见病
- 小儿腹泻教育课件
- 外语大一职业生涯规划
- 疾控慢病年终总结
- 造瘘口护理查房
- 西南联合大学生活规划
- 抗精神病药物浅谈
- 事故案例提醒危化品储存企业必须加大对油气罐区的风险防控
- 消渴病的饮食指导
- 生产车间统计员培训
- 期末 (试题) -2024-2025学年人教PEP版(2024)英语三年级上册
- 2024中国慢性阻塞性肺疾病基层诊疗与管理指南解读
- 学习课件教程教学课件
- 2024年港股通知识测评试题
- 贵州省2024年中考化学真题(含答案)
- 结构化面试的试题及答案
- 2024年高等教育公共课自考-00005马克思主义政治经济学考试近5年真题集锦(频考类试题)带答案
- DL∕ T 1195-2012 火电厂高压变频器运行与维护规范
- 美术课程与教学论智慧树知到期末考试答案章节答案2024年四川师范大学
- 中国民间传说:田螺姑娘
评论
0/150
提交评论