c语言从入门到精通--第16章课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《c语言从入门到精通--第16章课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 入门 精通 _ 16 课件
- 资源描述:
-
1、第16章合理利用内存位运算p 二进制数 p 位运算符 p 位域 p 综合应用数制转换 p 跟我上机 第16章C合理利用内存位运算 二进制数 p 位运算符 p 位域 p 综合应用数制转换 p 跟我上机 第16章C合理利用内存位运算 二进制数 位运算符 p 位域 p 综合应用数制转换 p 跟我上机 第16章C合理利用内存位运算 二进制数 位运算符 位域 p 综合应用数制转换 p 跟我上机 第16章C合理利用内存位运算 二进制数 位运算符 位域 综合应用数制转换 p 跟我上机 第16章C合理利用内存位运算 二进制数 位运算符 位域 综合应用数制转换 跟我上机 C合理利用内存位运算数据在计算机里是以二
2、进制形式表示的,在实际程序中,许多系统程序需要直接对二进制位数据操作,还有不少硬件设备与计算机通信都是通过一组二进制数控制和反应硬件的状态。C语言特别提供了直接对二进制位的操作的功能,称为位运算。位运算直接对内存中二进制数据进行操作,无需转成十进制,因此处理速度非常快。位运算的正确使用,可以合理利用内存,优化程序。16.1 二进制数16.1.1 二进制16.1.2 无符号数和有符号数16.1.1 二进制二进制就是逢二进一,比如十进制数3转换为二进制数11,十进制数10转换为二进制数1010。要把二进制数转换为十进制数,可以使用二进制的数字每一位对应一个2的某次幂,然后累加求和。比如:(1011
3、)2=1*23+0*22+1*21+1*20=8+0+2+1=(11)1032323216.1.1 二进制把二进制数中的每一个二进制数称为位(bit,比特),即,每个0或1就是一个位),位是数据存储的最小单位。通常,把一组4位二进制数称为半字节(nibble),一组8位二进制数称为一个字节(byte)。通常把两个或者四个字节称为一个字(word),两个字又称之为一个双字(double word)。16.1.2 无符号数和有符号数对一个字节而言,八位二进制数都是用来存储数据的,它只能表示非负整数,范围为0255。二进制0000 0000最小,表示十进制的0;二进制 1111 1111最大,表示十
4、进制的255。有符号数是通过一个字节左边第一位的二进制数来表示,0时表示整数,1表示负数。比如1000 0011表示-3,0000 0011表示3。16.1.2 无符号数和有符号数问题看似很完美地解决了,再来看个特殊情况,就是十进制数0。使用0000 0000 表示正0,使用1000 0000 表示负0,这样一对多的关系不利于数据的存储,程序开发也会产生很多隐患。为了解决以上问题,引入了二进制补码机制。正数的时候最高位是0,不需要再求补码(数在计算机内部存储时用来表示的二进制数),或者可以理解为原码(数直接转换的二进制数)和补码是相同的,因此0000 0011表示为十进制3。16.1.2 无符
5、号数和有符号数 负数的时候最高位是1,表示的原码先按位取反后加1(符号位不动),比如-3的原码是1000 0011,先按位取反变为1111 1100,然后再加1变成1111 1101,这样1111 1101就是-3在计算机内部存储时用来表示它的二进制数。反之,当你知道存储器中有序列1111 1101,而且知道它的最高位是符号位,表示的是一个负整数,把把转变为十进制数的方法就是先减1(符号位不动),变为1111 1100,然后再按位取反得1000 0011,即它表示的就是是-3了。注意:在这种系统中+0就是0000 0000,而此时的1000 0000则表示-128(这个特殊,不遵循补码机制,硬
6、性规定)。16.2 位运算符16.2.1 按位与运算符16.2.2 按位或运算符16.2.3 按位异或运算符16.2.4 按位取反运算符16.2.5 左移运算符16.2.6 右移运算符16.2.7 位运算赋值运算符16.2.8 位运算应用16.2 位运算符位运算符描述&按位与|按位或按位异或取反右移16.2 位运算符说明:位运算符中除以外,均为双目(元)运算符,即要求两侧各有一个运算量。运算量只能是整型或字符型的数据,不能为实型数据。16.2.1 按位与运算符按位与运算符“&”是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0,即:0
7、00,0 10,1 00,1 11注意:参与运算的数以补码形式出现。16.2.1 按位与运算符1.正数的按位与运算例如:计算10&5,需要先把十进制数转换为补码形式,再按位与运算,计算如下。0000 1010 10的二进制补码&0000 0101 5的二进制补码0000 0000 按位与运算,结果转换为十进制后为0所以10&5=016.2.1 按位与运算符2.负数的按位与运算例如:计算-9&-5。第1步:先转换为补码形式。-9的原码:1000 1001,反码:1111 0110,补码:1111 0111-5的原码:1000 0101,反码:1111 1010,补码:1111 1011第2步:补
8、码进行位与运算。1111 0111-9的二进制补码&1111 1011-5的二进制补码1111 0011按位与运算第3步:将结果转换为原码。补码:1111 0011,反码:1111 0010,原码:1000 1101,原码:-13,所以-9&-5=-13 16.2.1 按位与运算符3.按位与的作用按位与运算通常用来对某些位清0或保留某些位。例如要求把a 的高八位清 0,保留低八位,可以使用 a&255 运算(255 的二进制数为0000000011111111)。又比如,有一个数是0110 1101,希望保留从右边开始第3、4位,以到达程序的某些要求,可以这样运算:0110 1101&0000
9、 11000000 1100上式描述的就是为了保留指定位,进行的按位与运算,如果写成十进制形式,可以写成表达式如下109&12。16.2.2 按位或运算符按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1,即:0|00,0|11,1|01,1|11参与运算的两个数均以补码出现。例如:10|5可写算式如下:0000 1010|0000 01010000 111115的二进制补码所以10|5=1316.2.2 按位或运算符常用来将源操作数某些位置1,其它位不变。首先设置一个二进制掩码mask,执行 s=s|mask,把其中特定位
10、置1,其它位为0。比如有一个数是0000 0011,希望把它从右边开始第3、4位置为1,其他位不变,可以写成如下的形式:0000 0011|0000 1100=0000 1111即3|12=1516.2.3 按位异或运算符按位异或运算符“”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1,即:0 0=0,0 1=1,1 0=1,1 1=0参与运算数仍以补码出现,例如10 5可写成算式如下:0000 10100000 01010000 111115的二进制补码所以10 5=15充分利用按位异或的特性,可以实现以下效果。16.2.3 按位异或运算符 设置一
11、个二进制掩码mask,执行s=s mask,设置特定位置是1,可以使特定位的值取反;设置掩码中特定位置其它位为是0,可以保留原值。设有0111 1010,想使其低4位翻转,即1变为0,0变为1。可以将它与0000 1111进行运算,即:0111 1010 0000 11110111 010116.2.3 按位异或运算符 不引入第三变量,交换两个变量的值。想将a和b的值互换,可以用以下赋值语句实现:a a b;b b a;a a b;分析如下:(按位异或满足交换率)a=a b;b=b a=b a b=b b a=0 a=a;a=a b=a b a=a a b=0 b=b;假设a=3;b=4;验证
12、如下:a011b100a111(a b的结果,a变成)b100b011(b a的结果,b变成3)a11116.2.4 按位取反运算符求反运算符“”为单目运算符,具有右结合性。其功能是对参与运算的数的各二进位按位求反。例如9的运算为:(0000 1001),结果为:(1111 0110),如果表示无符号数是246,如果表示有符号数是-10(按照上文的方法自己演算)。16.2.5 左移运算符左移运算符“”是双目运算符。其功能把“”左边的运算数的各二进位全部左移若干位,由“”右边的数指定移动的位数。1.无符号数的左移如果是无符号数,则向左移动n位时,丢弃左边n位数据,并在右边填充0。如下图所示。16
展开阅读全文