- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
位运算【DOC精选】
第13章 位 运 算
C语言之所以具有广泛的用途和强大的生命力,就在于它既具有高级语言的特点,又具有低级语言(汇编语言)的功能。第8章和第10章中介绍的指针运算以及本章将介绍的位运算正是C语言较其他高级语言的优势所在,它们是编写系统程序必不可少的功能。
所谓位运算是指进行二进制数的位运算。在系统软件中常要处理二进制位的问题。例如将一个存储单元中的二进制位左移或右移一位;两个数按位相加等。
13.1 二进制位运算概述
二进制位运算是属于二进制数的逻辑运算。在第3章中我们已经介绍了基本数据的逻辑运算,在此将进一步讨论按位进行的二进制数逻辑运算。
1.一位二进制数的逻辑运算
(1) 逻辑或运算。逻辑或运算是:如果一位二进制数变量A或B两者中至少有一个等于1,则结果为1,否则结果为0。
通常用加号“?”表示“或”,运算规则为:
由上式可见,或运算与二进制加法的惟一差别在于1?1?1,而不是等于10,无进位关系。或运算又称为逻辑加。
(2) 逻辑与运算。逻辑与运算是:只有当一位二进制数变量A与B都取1时,结果为1,否则结果为0。通常用乘号“?”表示“与”,运算规则为:
可以看出其运算规则与代数乘法相同,故逻辑与也称为逻辑乘。
(3) 逻辑非运算。逻辑非运算是:输出结果与输入值相反,记为F?,上面的横杠表示非,读作“A非”,其运算规则为:
?0
?1
2.N位二进制数的逻辑运算
上面讨论了一位二进制数的逻辑运算,对两个N位二进制数进行逻辑运算,是对应的各位独立进行,位与位之间无进位、借位、溢出等关系。
例13.1 有两个八位二进制数x、y,xy分别求x?y、x?y和。
从上例中可以看出,对两个N位二进制数进行逻辑或运算,凡对应数位中有1者,结果对应位均为1;对两个N位二进制数进行逻辑与运算,凡对应数位中有0者,结果对应位均为0;对一个N位二进制数进行逻辑非运算,就是按位求其反值。
3.逻辑异或运算
上面已讨论了逻辑或、逻辑与、逻辑非运算,它们是逻辑运算中的基本运算,也就是说其他更复杂的逻辑运算都是由它们结合而成的。逻辑异或运算就是复合逻辑运算之一。由于逻辑异或运算是一个常用的复合逻辑运算,所以我们有必要专门加以讨论。
逻辑异或运算的逻辑功能为:
A⊕B ? A?+?B
该逻辑运算也称按位模加法,简称按位加,通常用“⊕”表示。逻辑异或运算规则为:
可以看出,它恰好是一位二进制数不考虑进位的加法运算。
例13.2 xy求X⊕Y。
13.2 位 运 算 符
C语言中提供的位运算符包括一元运算符:
? (位求反)
和二元运算符:
(位与) |(位或) ^(位异或) ??(左移) ??(右移)
位运算符的功能是对其操作数按其二进制形式逐位地进行逻辑运算或移位操作。由位运算的特点决定了操作数只能是整数型或字符型的数据,不能为实型数据。
为了举例方便,现设有两个变量:
unsigned char c?135, d?43;
则变量c和d的二进制表示分别00101011。
1.位运算符的操作
(1) 按位求反:运算符“?”将其操作数逐位地取其反码,即将原来为1的位变为0,为0的位变为1(逻辑非运算)。例如:
?c?故?c的结果即十进制数120。
(2) 按位与:运算符“”将其两个操作数的对应位逐一进行逻辑与运算。例如:
cd?(3) 按位或:运算符“|”将其两个操作数对应位逐一进行逻辑或运算。例如:
c | d? | (4) 按位异或:运算符“^”将其两个操作数对应位逐一进行逻辑异或运算。例如:
c^d?^(5) 按位左移:运算符“??”将其左操作数向左移动右操作数所要求的位数,右边空出的位补以0。其一般形式为:
OPRD??n
它的移位操作过程为:
由于移位运算符右操作数表示移动的位数,所以它必须是一个整型表达式。例如,位运算d??1的功能就是把d的数据左移一位。若d十进制43),则语句“d??1;”执行完后,d的值十进制数86)。移位操作的过程如下所示:
0 | 0101011 0
此位舍去 补0
又如位运算d??2的结果为10
文档评论(0)