第17篇位运算操作符.ppt

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第17章 位运算操作符 在本章的学习中,需要掌握以下内容: 字节和位的概念; 原码与补码的转换; 6种位操作符及其组成的位运算赋值操作符的使用; 各个位操作符的特殊用途; 位域的概念和位域的使用。 17.1 位运算 位运算是指对数据的二进制位进行处理的运算。位运算与数据在内存中的存储方式息息相关,因此在介绍位运算操作符之前,有必要先介绍一些操作系统中数据存储和处理的相关知识。本节首先介绍字节与位的概念以及两者的关系,再介绍数据在内存中的储存方式。 17.1.1 字节与位 在前面的介绍中已多次涉及到字节的概念。操作系统中的各种类型的数值都由若干个字节组成,字节也是数据存取和数值计算的基本单元。从内存中读取数据是以字节为最小单位,向内存中写入数据也是以字节为最小单位。将数值输出到文件和从文件获取数值时,最小单位也是字节。 17.1.1 字节与位 字节在操作系统中可以分为更小的单元“位”。大部分系统中,1个字节由8个位组成,每个位的值为0或1。一个字节的数值由其8个位的值决定,如果一个字节的内容为。其对应的值为: 这个字节的值为8个位组成的二进制数。但是在操作系统中,数值的存储并不是直接以其二进制值存储的。 17.1.2 补码 在操作系统中,数值一律用补码来存储。一个数值的二进制值可以称其为原码,存储时会将原码表示为补码。补码的最高位为符号位,数值的补码表示可以分为以下两种情况。 17.1.2 补码 1.非负数的补码 非负数的补码与原码相同。 例如,11的原码其补码也 注意:为了简化书写,讨论位运算时,大部分的数值只用一个字节表示。 2.负数的补码 负数的补码的符号位为1,其余位为将该数绝对值的原码按位取反后再加1的结果。例如,-15的补码:因为是负数,则符号位为“1”,整个其余7位为-15的绝对值的原码按位取反,即0001111取反后为1110000,再加1为1110001;加上符号位,最后-15的补码已知一个数的补码,其求原码的过程与已知原码求补码的过程完全一样: 如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码。 如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为1,其余各位取反加1。 使用补码计算时,可以将符号位和其他位统一处理。 17.1.2 补码 例如,7 + 15,其补码相加如左图所示。 (-7) + (-15),其补码相加如右图所示。 注意:两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。 减法也可按加法来处理,7 – 15的计算过程如下图所示。 17.2 位运算操作符 C语言共提供了6个位运算操作符,包括取反操作符(~)、位或操作符(|)、位与操作符()、异或操作符(^)和位移操作符(和)。每一个操作符都有各自独特的作用。本节将依次介绍各个操作符的语法,并通过范例来讲解各个操作符的使用,在最后还简要地介绍各个操作符与赋值操作符组合而成的位运算赋值操作符的使用。 17.2.1 取反操作符(~) 取反操作符是一个一元操作符,其使用形式为: ~操作数; 该操作数可以为常量,也可以为变量。取反操作符可以将数按位取反,即将0变为1,将1变为0。例如,~15是对15的在内存中的存储形式按位取反,如下图所示。 17.2.2 位或操作符(|) 位或操作符是一个二元操作符,形式如下: 数1 | 数2 同样,这两个数可以是常量,也可以是变量。位或操作符将两个操作数逐位进行位或运算。两个位值进行位或运算的规则是:只要有一个数值为1,位或的结果便为1;如果都为0,位或的结果为0。位或运算结果如下: 1 | 1 = 1 1 | 0 = 1 0 | 1 = 1 0 | 0 = 0 17.2.2 位或操作符(|) 例如,运算39 | 15,00001111逐位进行位或运算,得到结即47。过程如下图所示。 17.2.2 位或操作符(|) 位或操作符有以下两种用途: 1.对指定二进制位的赋值 位或操作符可以实现对数值指定二进制位赋值为1。例如,要将a的第4位置为1,可以使用以下代码: int a = 39; a = a | 0x0f; 由于0x0f低4位全为1,因此与该值位或操作后,a的低4位被置为1,其余位值不变。 17.2.2 位或操作符(|) 2.判定指定二进制位的值 当位或操作符与取反操作符结合在一起可以判断指定数位的值,例如要判断一个整数a其二进制第3位的值,可以如下表示: if ( ~0 == a | ~(0x04)) printf(“a 的第3位为1”); else printf(“a 的第3位为

文档评论(0)

xuefei111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档